设置动态懒惰属性

时间:2019-03-05 21:37:16

标签: python

我正在尝试动态设置会延迟计算的属性。我尝试了下面的许多不同版本。

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对象本身。

0 个答案:

没有答案