我正在尝试动态设置会延迟计算的属性。我尝试了下面的许多不同版本。
class A(object):
_props = (('x', 1), ('y', 2))
def __init__(self):
self._set_dynamic_attrs()
def _set_dynamic_attrs(self):
for prop, value in A._props:
def dynamic_property(value):
print('Evaluating for {}'.format(prop))
return value
setattr(self, prop, dynamic_property)
property(getattr(self, prop)(value))
obj = A()
print(obj)
print(obj.x)
print(obj.y)
我正在寻找的输出是:
<__main__.A object at 0x19f65c8>
Evaluating for x
1
Evaluating for y
2
我得到的是:
Evaluating for x
Evaluating for y
<__main__.A object at 0x215c188>
<function A._set_dynamic_attrs.<locals>.dynamic_property at 0x21c3948>
<function A._set_dynamic_attrs.<locals>.dynamic_property at 0x2218e68>
无论我尝试了什么,这些属性要么都不懒洋洋地求值,要么该属性返回一个函数或一个property
对象本身。