返回值是可取的,因为它允许您将所有属性修改都放在一个位置(
__init__)。同样,这使得以后扩展代码更容易。假设您要
_build_query在子类中重写,则重写方法可以返回一个值,而无需知道要设置哪个属性。这是一个例子:
class QueryHelper(object): def __init__(self, param, text): self._param = param self._query = self._build_query(text) def _build_query(self, text): return text + " and ham!"class RefinedQueryHelper(QueryHelper): def _build_query(self, text): # no need to know how the query object is going to be used q = super(RefinedQueryHelper, self)._build_query() return q.replace("ham", "spam")与“安装程序版本”:
class QueryHelper(object): def __init__(self, param, text): self._param = param self._build_query(text) def _build_query(self, text): self._query = text + " and ham!"class RefinedQueryHelper(QueryHelper): def _build_query(self, text): # what if we want to store the query in __query instead? # then we need to modify two classes... super(RefinedQueryHelper, self)._build_query() self._query = self._query.replace("ham", "spam")如果确实选择设置属性,则可能需要调用该方法
_set_query以使其更加清晰。



