装饰器

Python 装饰器(Decorator)用于在不修改原函数代码的前提下,动态为函数或类增加额外功能。

基本概念

装饰器本质是一个接受函数(或类)作为参数并返回一个新函数(或类)的高阶函数。使用@decorator_name写在被装饰函数上方,等价于func = decorator(fuc)

def my_decorator1(func):
    def wrapper():
        print("Before function call")
        func()
        print("After function call")

    return wrapper


@my_decorator1
def print_func1():
    print("我是函数打印")
# 输出
# Before function call
# 我是函数打印
# After function call

带参数的装饰器

如果被装饰的函数有参数,装饰器内部的wrapper函数需要支持任意参数:

带参数的装饰器函数(装饰器工厂)

有时我们需要给装饰器本身传参,这就需要“三层嵌套”。

保留原函数元信息

如果不处理,装饰后的函数会丢失原函数的 __name____doc__ 等属性。应使用 functools.wraps

类装饰器

装饰器也可以是类,只要实现 __call__ 方法:

多个装饰器的执行顺序,当一个函数被多个装饰器装饰时,从下往上应用,最靠近函数的先执行,但调用时从上往下执行

最后更新于