使用类装饰器还可以依靠类内部的__call__方法,但使用@形式将装饰器附加到函数上时,就会调用此方法。
如下代码:
class Foo(object):
def __init__(self, func):
self._func = func
def __call__(self, *args, **kwargs):
print("class decorator running")
self._func()
print("class decorator ending")
def bar():
print("i am bar")
@Foo
def bar():
print("I am bar")
@Foo
def HelloWorld():
print("Hello World")
if __name__ == "__main__":
bar()
HelloWorld()
运行截图如下:
类装饰器在使用时,没有函数装饰器用得多。