zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Python基础语法-函数-函数装饰器-带参数的类装饰器

Python基础 函数 参数 语法 装饰
2023-06-13 09:18:41 时间

带参数的类装饰器

类装饰器还可以带参数。例如,下面是一个带参数的类装饰器示例:

class DecoratorClass:
    def __init__(self, message):
        self.message = message

    def __call__(self, func):
        def wrapper():
            print('Before the function is called with message:', self.message)
            func()
            print('After the function is called with message:', self.message)
        return wrapper

@DecoratorClass('Hello World!')
def say_hello():
    print('Hello World!')

say_hello()

在这个例子中,我们定义了一个名为“DecoratorClass”的类装饰器。这个类接受一个参数“message”,并在实例化时将其保存在“self.message”属性中。然后,我们定义了一个名为“call”的特殊方法,它接受一个函数作为参数,并返回一个包装器函数。

然后,我们将带有参数的类装饰器应用于我们的“say_hello”函数。我们将“Hello World!”作为参数传递给装饰器类,并将结果分配给“say_hello”函数,这意味着我们将“say_hello”函数传递给“DecoratorClass”实例的“call”方法作为参数,并将“Hello World!”传递给它作为第一个参数。

最后,我们调用“say_hello”函数,它将在执行前和执行后打印两条消息,分别是装饰器类的前置和后置消息,包括我们传递给装饰器类的消息,以及我们原始函数的输出。