1 回答
TA贡献1784条经验 获得超8个赞
这实际上取决于您的总体设计是什么,以及您期望实例在任何给定时间处于什么状态以及您对它的处理方式(换句话说,属性本身的存在是否有意义,但是......前者似乎通常更y安全我。你调用并获得一个值,你不必跟踪,我是否调用了该方法以及这个或那个属性处于什么状态?但请注意,你应该真正在构造函数中定义实例属性,否则访问可能不仅令人惊讶,而且是致命的(AttributeError)。
现在,解决上述一些问题并且可能适合您在此处访问值的操作的简洁解决方案可能是 property ,它本质上允许您访问方法返回的值,就好像它是实例属性一样:
class foo():
def __init__(self, x):
self.x = x
def extract_y_info(self):
return #some code that extracts y info from self.x
y = property(extract_y_info)
for f in foo_instances:
print(f"value of f.y = {f.y}")
property或者您可以使用方法装饰器执行相同的操作:
@property
def y(self):
return #some code that extracts y info from self.x
如果获取y
成本昂贵且其值在实例的整个生命周期内不会改变,从 Python 3.8 开始,您还可以使用cached_property
.
添加回答
举报