装饰器
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__ 方法:
多个装饰器的执行顺序,当一个函数被多个装饰器装饰时,从下往上应用,最靠近函数的先执行,但调用时从上往下执行
最后更新于