gpt4 book ai didi

python - 装饰器将方法标记为即使调用多次也只执行一次

转载 作者:太空狗 更新时间:2023-10-30 02:35:43 26 4
gpt4 key购买 nike

我直接上例子:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com