装饰器函数导致的原函数的元数据被替代--保存元数据
我们使用装饰器函数后,会导致元数据被覆盖成装饰器函数的元数据,例如__name__,
下例子如果不添加 @wraps(func),则输出结果为wrapper, 我们添加后,输出结果为test
@wraps(func): 相当于 update_wrapper(wrapper,func,WRAPPER_ASSIGNMENTS,WRAPPER_UPDATES)
WRAPPER_ASSIGNMENTS:__name__,__doc__,__module
WRAPPER_UPDATES:__dict__
from functools import update_wrapper,wraps
def mydecorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
'''wrapper'''
func(*args, **kwargs)
print("wrapper")
return wrapper
def test():
'''testtest'''
print("test")
print(mydecorator(test).__name__)