Rei*_*ica 4 python methods class decorator
我将直接举例说明:
class Foo:
@execonce
def initialize(self):
print 'Called'
>>> f1 = Foo()
>>> f1.initialize()
Called
>>> f1.initialize()
>>> f2 = Foo()
>>> f2.initialize()
Called
>>> f2.initialize()
>>>
Run Code Online (Sandbox Code Playgroud)
我试图定义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
Run Code Online (Sandbox Code Playgroud)