我想创建一个像属性一样工作的装饰器,只调用一次装饰函数,并且在随后的调用中总是返回第一个调用的结果。举例:如何为一个属性的延迟初始化创建装饰器
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