我想創建一個像屬性一樣工作的裝飾器,只調用一次裝飾函數,並且在隨後的調用中總是返回第一個調用的結果。舉例:如何爲一個屬性的延遲初始化創建裝飾器
def SomeClass(object):
@LazilyInitializedProperty
def foo(self):
print "Now initializing"
return 5
>>> x = SomeClass()
>>> x.foo
Now initializing
5
>>> x.foo
5
我的想法是爲此編寫一個自定義裝飾器。所以我就開始了,這是多遠我就來了:
class LazilyInitializedProperty(object):
def __init__(self, function):
self._function = function
def __set__(self, obj, value):
raise AttributeError("This property is read-only")
def __get__(self, obj, type):
# problem: where to store the value once we have calculated it?
正如你所看到的,我不知道在哪裏存儲緩存值。最簡單的解決方案似乎是維護一本字典,但我想知道是否有一個更優雅的解決方案。
編輯對不起,我忘記提及我希望屬性是隻讀的。
這可能是我的問題的重複:Python的懶財產裝飾(http://stackoverflow.com/questions/3012421/python-lazy-property-decorator) – detly 2010-07-13 14:01:11
你說得是。沒有在建議框中看到它。投票結束。 – 2010-07-13 14:10:17