Python编码风格 - 类中的属性/设置器?

时间:2013-04-17 07:29:44

标签: python coding-style

类中的方法是否应该使用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

目前我的代码是两者的混合。不知道重构的方向。

1 个答案:

答案 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风格。