属性和属性之间的区别

时间:2016-09-16 18:07:20

标签: python reflection functools

我在Python中使用延迟初始化以节省加载时间。我有一些仅在使用时初始化的属性,因此如果从未使用它们,则永远不会收取创建它们的成本。一个例子是:

class myClass(object):
    anotherInfo = 1
    def __init__(self,var):
        self._MY_DATA = None
        self.var = var

    @property
    def my_data(self):
        if getattr(self, '_MY_DATA', None) is None:
            print "Populate my_data"
            my_data = self.var
            self._MY_DATA = my_data
        return self._MY_DATA

    def invalidate_data(self):
        self._MY_DATA = None

if __name__ == '__main__':
    x = myClass("1")
    print x.my_data
    x.invalidate_data()
    print x.my_data

我的问题如下,有些事件导致所有属性都处于松散状态,并且我已经重置了所有属性(到了从未使用过的状态)。我想自动执行此操作,因此我需要所有属性的列表。

我可以通过使用检查模式的反射得到这个,但我没有找到任何方法这样做。

另一种是每次执行@property包装时都添加属性,但是如何编写一个接收getter函数和对象的包装器以保存属性?

另一种方法是包装@property包装器,以便附加到对象中的列表(例如__properties__)我要重置的属性。

0 个答案:

没有答案
相关问题