使用类装饰器还可以依靠类内部的__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()
运行截图如下:
类装饰器在使用时,没有函数装饰器用得多。