引用实例变量而不实现getter有什么问题吗



简言之,我通过API接收json事件,最近我学到了更多关于类的知识。推荐使用类的方法之一是实现getter、setter等。然而,我的类并不太复杂,它们所做的只是解析json对象中的数据,并将格式更好的数据传递到进一步的ETL过程中。

下面是我遇到的一个简单的例子。

data = {'status': 'ready'}

class StatusHandler:
def __init__(self, data):
self.status = data.get('status', None)

class StatusHandler2:
def __init__(self, data):
self._status = data.get('status', None)
@property
def status(self):
return self._status

without_getter = StatusHandler(data)
print(without_getter.status)
with_getter = StatusHandler2(data)
print(with_getter.status)

我使用类StatusHandler并引用状态实例变量,并使用该变量将信息转发给其他代码位,这有什么问题吗?我只是想知道,随着我的项目变得越来越复杂,这是否会成为一个问题,因为它似乎不是标准的,尽管我可能错了。。。

getters/ssetters的目的是避免在必须更改实现时用计算属性访问替换普通属性访问,而不会破坏客户端代码。这只适用于不支持计算属性的语言。

Python通过描述符协议(包括通用内置property类型(对计算属性提供了非常强大的支持,因此您不需要显式的getter/setter-如果您必须更改实现,只需将受影响的公共属性替换为计算属性即可。

只要确保不要滥用计算属性-它们不应该进行任何繁重的计算、外部资源访问等。没有人期望看起来像属性的东西会有高成本或引发IOErrors等;-(

编辑

关于您的示例:计算属性是控制属性访问的一种方式,将属性设为只读(不为property提供setter(是一个非常有效的用例——当然,如果您有理由将其设为只读的话。

最新更新