10. 类装饰器
什么是类装饰器
类装饰器(Class Decorator) 是使用类(而不是函数)来装饰其他函数或类的装饰器。
类装饰器通过实现 __call__
方法,使得类的实例可以像函数一样被调用,从而实现对目标函数或类的增强或修改。
类装饰器的基本结构:
在 __init__
方法中接收被装饰的函数或类。
在 __call__
方法中定义装饰逻辑,并调用原函数或类。
示例
# 类装饰器示例
class NumberAdder:
def __init__(self, fn):
self.fn = fn
self.value = 0
def __call__(self, *args):
result = self.fn(*args)
self.value += result
return self.value
@NumberAdder
def add(a, b, c=0, d=0):
return a + b + c + d
# add = NumberAdder(add)
print(add(1, 2)) # 3
# 能否将之前加过的和也累加到此函数的调用?
print(add(3, 4, 5))
上述程序中 NumberAddr 就是一个类,同时它也可以作为一个装饰器使用。
函数装饰器 和 类装饰器 的比较
- 函数装饰器通常使用闭包来存储被装饰函数等信息,简单方便。
- 类装饰器通过属性可以存储更多的信息,方便实现更复杂的功能。
后面学到的很多装饰器都是类装饰器,如:
- classmethod
- staticmethod
- property