自学内容网 自学内容网

Python面试题:在 Python 中,如何实现装饰器嵌套?

在 Python 中,装饰器嵌套是指一个函数同时被多个装饰器装饰。你可以通过将多个装饰器依次应用到函数上来实现装饰器嵌套。每个装饰器都可以独立地增强或修改被装饰函数的行为。

以下是一个简单的示例,展示了如何实现和使用装饰器嵌套:

定义装饰器

首先,我们定义两个简单的装饰器:

def decorator1(func):
    def wrapper(*args, **kwargs):
        print("Decorator 1: Before function call")
        result = func(*args, **kwargs)
        print("Decorator 1: After function call")
        return result
    return wrapper

def decorator2(func):
    def wrapper(*args, **kwargs):
        print("Decorator 2: Before function call")
        result = func(*args, **kwargs)
        print("Decorator 2: After function call")
        return result
    return wrapper

应用装饰器嵌套

然后,我们可以将这两个装饰器同时应用到一个函数上:

@decorator1
@decorator2
def my_function():
    print("This is my function.")

my_function()

输出结果

运行上面的代码,输出将是:

Decorator 1: Before function call
Decorator 2: Before function call
This is my function.
Decorator 2: After function call
Decorator 1: After function call

解释

当你使用 @decorator1@decorator2 装饰 my_function 时,装饰器的应用顺序是自下而上。即:

  1. my_function 首先被 @decorator2 装饰,返回一个新的函数 wrapper
  2. 然后这个新的函数 wrapper 又被 @decorator1 装饰,再返回一个新的函数 wrapper

最终调用 my_function() 实际上是调用最外层装饰器返回的 wrapper 函数,按照装饰器的嵌套顺序执行。

使用函数方式嵌套装饰器

你也可以用函数调用的方式来嵌套装饰器:

def my_function():
    print("This is my function.")

my_function = decorator1(decorator2(my_function))

my_function()

这个方式和使用 @ 语法效果相同,也是先应用 decorator2 然后再应用 decorator1

通过这种方式,你可以很容易地实现装饰器的嵌套来增强或修改函数的行为。


原文地址:https://blog.csdn.net/bifengmiaozhuan/article/details/140260538

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!