第一个装饰器的代码:
registry = []
def register(func):
def __init__(self):
print("INIT!!!")
print('running register(%s)' % func)
registry.append(func)
return func
@register
def f1():
print('running f1()')
def main():
print('registry ->', registry)
f1()
if name =='main':
main()
上面代码的输出如下,可见装饰器的__init__方法并没有执行:
running register()
registry -> []
running f1()
第二个装饰器的代码:
class tracer(object):
def __init__(self, func):
print("tracer: init")
self.func = func
def __call__(self, *args, **kwargs):
return self.func(*args, **kwargs)
class C:
def __init__(self):
pass
@tracer
def f(self):
print("run f!")
print("--------------")
输出如下:
tracer: init
我的问题是,这两个装饰器为何第一个装饰器的__init__方法没有执行,而第二个装饰器的__init__方法却被执行了?