@wraps作用,装饰器修复技术啥用?
其实吧,装饰器在实现的时候,被装饰的函数已经是另一个人了,函数名和属性已经发僧改变.
让我们来一探究竟
from functools import wraps
def wrapper(func):
# @wraps(func)
def inner(*args, **kwargs):
print("装饰器工作中...")
func(*args, **kwargs)
return inner
@wrapper
def f1(arg):
"""
这是一个测试装饰器修复技术的函数
:param arg: 随便传
:return: 没有
"""
print(arg)
f1('呵呵')
print(f1.__name__,f1.__doc__) # 函数的名字,和注释
打印结果:
可以发现打印的函数的名字和注释都变成了装饰器内部得了...
本来你想要的是被装饰的函数的属性和名字啊,可是被改变了.
那么我们就需要修复装饰器了
form functools import wraps
def wrapper(func):
@wraps(func)
def inner(*args, **kwargs):
print("装饰器工作中...")
func(*args, **kwargs)
return inner
@wrapper
def f1(arg):
"""
这是一个测试装饰器修复技术的函数
:param arg: 随便传
:return: 没有
"""
print(arg)
f1('呵呵')
print(f1.__name__,f1.__doc__)
修复完成!!!