3.1.1.2 获取函数属性
默认地,partial对象没有__name__或__doc__属性。如果没有这些属性,被修饰的函数将更难调试,使用update_wrapper()可以从原函数将属性复制或增加到partial对象。
import functools
def myfunc(a,b=2):
"Docstring for myfunc()."
print(' called myfunc with:',(a,b))
def show_details(name,f):
"Show details of a callable object."
print('{}:'.format(name))
print(' object:',f)
print(' __name__:',end=' ')
try:
print(f.__name__)
except AttributeError:
print('(no __name__)')
print(' __doc__',repr(f.__doc__))
print()
show_details('myfunc',myfunc)
p1 = functools.partial(myfunc,b=4)
show_details('raw wrapper',p1)
print('Updating wrapper:')
print(' assign:',functools.WRAPPER_ASSIGNMENTS)
print(' update:',functools.WRAPPER_UPDATES)
print()
functools.update_wrapper(p1,myfunc)
show_details('updated wrapper',p1)
增加到包装器的属性在WRAPPER_ASSIGNMENTS中定义,另外WRAPPER_UPDATES列出了要修改的值。
运行结果: