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

Python编码风格-类内的属性/设置器?,python,coding-style,Python,Coding Style,类中的方法应该使用属性/设置器访问器、la“add_to_field”还是直接访问私有变量、la“subtract from field” 如果setter不是单纯地设置变量,而是执行其他操作,比如日志记录,那又如何呢。这种款式不好吗 @field.setter def field(self, field): log.logger.debug("Field set to %r", field) self._field = field 目前我的代码

类中的方法应该使用属性/设置器访问器、la“add_to_field”还是直接访问私有变量、la“subtract from field”

如果setter不是单纯地设置变量,而是执行其他操作,比如日志记录,那又如何呢。这种款式不好吗

    @field.setter
    def field(self, field):
        log.logger.debug("Field set to %r", field)
        self._field = field

目前我的代码是两者的混合体。不确定重构的方向。

避免使用getter和setter的主要原因是避免潜在的无限递归(setter调用方法foo来设置对象,方法foo调用foo等等)

否则,最好总是调用getter/setter,以确保程序数据保持一致

我的建议是:始终使用你的能手/能手。如果您在某一点上开始使用复杂的setter,而第一点变成了一个问题,那么您应该尝试重新思考您的代码,使它们保持简单。另外一种方法可以重构setter中完成的所有繁重工作

如果您的getter/setter正好是“返回值”和“为变量赋值”,那么您就不应该定义任何getter或setter。Python中的一个优点是,当您需要getter或setter时,您将能够完全透明地完成它。 这就是为什么在C++中,有时通过GETER和SETTER总是访问属性的做法是很好的,即使这些只是“哑”函数。
总而言之:我将使用
add_To_字段
样式。

在最初的示例中,您根本不应该使用属性。只需使用普通属性访问。
    @field.setter
    def field(self, field):
        log.logger.debug("Field set to %r", field)
        self._field = field