我的 Python 类有一些变量需要在第一次调用时进行计算。后续调用应该只返回预先计算的值。
我不想浪费时间做这项工作,除非用户确实需要它们。
那么有没有一种干净的 Pythonic 方式来实现这个用例呢?
我最初的想法是第一次使用 property() 调用函数,然后覆盖变量:
class myclass(object):
def get_age(self):
self.age = 21 # raise an AttributeError here
return self.age
age = property(get_age)
Thanks
class myclass(object):
def __init__(self):
self.__age=None
@property
def age(self):
if self.__age is None:
self.__age=21 #This can be a long computation
return self.__age
亚历克斯提到你可以使用__getattr__
,这就是它的工作原理
class myclass(object):
def __getattr__(self, attr):
if attr=="age":
self.age=21 #This can be a long computation
return super(myclass, self).__getattribute__(attr)
__getattr__()
当对象上不存在该属性时调用,即。当您第一次尝试访问时age
。之后的每一次,age
如此存在__getattr__
没有被叫到
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)