我将直接进入示例:
class Foo:
@execonce
def initialize(self):
print 'Called'
>>> f1 = Foo()
>>> f1.initialize()
Called
>>> f1.initialize()
>>> f2 = Foo()
>>> f2.initialize()
Called
>>> f2.initialize()
>>>
我试图定义
execonce
但无法编写一个适用于方法的代码。PS:我无法在
__init__
中定义代码,因为 initialize
必须在对象初始化后的某个时间调用。 cf - cmdln issue 13 最佳答案
import functools
def execonce(f):
@functools.wraps(f)
def donothing(*a, **k):
pass
@functools.wraps(f)
def doit(self, *a, **k):
try:
return f(self, *a, **k)
finally:
setattr(self, f.__name__, donothing)
return doit
关于python - 装饰器将方法标记为即使多次调用也不会执行超过一次,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1089023/