python装饰器保留函数原有信息的@functools.wraps源码解析
# 调用functools库的partial方法
from functools import partial
# 要保留的原函数参数
WRAPPER_ASSIGNMENTS = ('__module__', '__name__', '__qualname__', '__doc__',
'__annotations__')
# 更新属性字典
WRAPPER_UPDATES = ('__dict__',)
def update_wrapper(wrapper,
wrapped,
assigned=WRAPPER_ASSIGNMENTS,
updated=WRAPPER_UPDATES):
'''
恢复原函数自身属性的装饰器实际处理函数
:param wrapper:装饰器的闭包函数
:param wrapped:被装饰的原函数
:param assigned:需要保留的原函数属性集合
:param updated:更新闭包函数的属性
:return:恢复原函数属性的闭包函数
'''
print("wrapper is", wrapper.__name__)
#循环恢复原函数的属性
for attr in assigned:
try:
value = getattr(wrapped, attr) #获取原函数的属性
except AttributeError: