除了函数装饰器之外,Python还允许我们使用类装饰器来装饰函数。类装饰器是一个类,它接受一个函数作为参数并返回一个包装器函数。例如,下面是一个使用类装饰器的示例:
class DecoratorClass:
def __init__(self, func):
self.func = func
def __call__(self):
print('Before the function is called.')
self.func()
print('After the function is called.')
@DecoratorClass
def say_hello():
print('Hello World!')
say_hello()
在这个例子中,我们定义了一个名为“DecoratorClass”的类装饰器。这个类接受一个函数作为参数,并在实例化时将其保存在“self.func”属性中。然后,我们定义了一个名为“call”的特殊方法,它将在实例被调用时执行,并且可以让实例像函数一样被调用。
然后,我们将“DecoratorClass”应用于我们的“say_hello”函数,这意味我们将“DecoratorClass”实例化,并将“say_hello”函数作为参数传递给它。这将创建一个新的“DecoratorClass”实例,并将其保存在“say_hello”函数的位置。
最后,我们调用“say_hello”函数,它将在执行前和执行后打印两条消息,分别是装饰器类的前置和后置消息,以及我们原始函数的输出。