我在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__
)我要重置的属性。