下面是我遇到的一个简单示例。
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类并引用状态实例变量,然后使用该变量将信息传递给其他代码位,我有什么问题吗?我只是想知道随着我的项目变得更加复杂,这是否会成为一个问题,因为尽管我可能是错的,但这似乎不是标准的问题。
答案 0 :(得分:2)
getter / setter的要点是避免在必须更改实现时以及在不破坏客户端代码的情况下用计算的属性替换普通属性的访问。这仅对不支持计算属性的语言有意义。
Python 对the descriptor protocol到计算属性的支持非常强,包括通用的内置property
类型,因此您不需要显式的getter / setter方法-如果您必须更改您的实现,只需将受影响的公共属性替换为计算的公共属性即可。
请确保不要滥用计算出的属性-它们不应进行任何繁重的计算,外部资源访问等。没有人期望看起来像属性的东西会产生高成本或提高IOError左右;-)
编辑
对于您的示例:计算属性是一种控制属性访问的方法,并且使属性为只读(不为property
提供设置器)是一种完全有效的用例-如果您有一个当然使其成为只读的原因。