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 就是一个类,同时它也可以作为一个装饰器使用。

函数装饰器 和 类装饰器 的比较

后面学到的很多装饰器都是类装饰器,如:

  1. classmethod
  2. staticmethod
  3. property