装饰器函数导致的原函数的元数据被替代--保存元数据

我们使用装饰器函数后,会导致元数据被覆盖成装饰器函数的元数据,例如__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__)

posted on 2018-01-16 14:38  linuxSu  阅读(306)  评论(0编辑  收藏  举报

导航