类中的方法是否应该使用property / setter访问器,la“add_to_field”还是应该直接访问私有变量la“从字段中减去”?
class Example(object):
def __init__(self, field):
self._field = field
@property
def field(self):
return self._field
@field.setter
def field(self, field):
self._field = field
def add_to_field(self, something):
self.field += something
def subtract_from_field(self, something):
self._field += something
如果setter不是纯粹设置变量,而是执行其他操作,例如日志记录,那该怎么办?这是不好的风格吗?
@field.setter
def field(self, field):
log.logger.debug("Field set to %r", field)
self._field = field
目前我的代码是两者的混合。不知道重构的方向。
答案 0 :(得分:3)
避免使用getter和setter的主要原因是为了避免潜在的无限递归(你的setter调用你设置对象的方法foo,调用foo等)。
否则,最好始终调用getter / setter,以确保程序数据保持一致。
我的建议是:始终使用你的getter / setter。如果您在某一点开始使用复杂的setter并且第一点成为问题,那么您应该尝试重新考虑您的代码以使它们保持简单。另一种方法可以重构在制定者中完成的所有繁重工作。
如果你的getter / setter正好是“返回值”和“为变量赋值”,那么你就不应该定义任何getter或setter。 Python中的一个好处是,当你需要getter或setter时,你将能够完全透明地完成它。 这就是为什么在C ++中,有时候通过getter和setter 始终访问属性有时被认为是好的做法,即使这些只是“虚拟”函数。
总结一下:我会选择add_to_field
风格。