包装函数的函数名? [复制]
Posted
技术标签:
【中文标题】包装函数的函数名? [复制]【英文标题】:Function name of wrapped function? [duplicate] 【发布时间】:2015-08-28 06:21:18 【问题描述】:如何获取原始函数的名称?
def wrap(f):
def wrapped_f(*args, **kwargs):
# do something
return wrapped_f
@wrap
def A(params):
# do something
print(A.__name__)
结果:wrapped_f,但我需要 A!
【问题讨论】:
【参考方案1】:使用functools.wraps()
:
直接来自文档:
如果不使用这个装饰器工厂,示例函数的名称将会是 'wrapper',并且原始 example() 的文档字符串将会丢失。
示例:
from functools import wraps
def wrap(f):
@wraps(f)
def wrapped_f(*args, **kwargs):
pass
return wrapped_f
@wrap
def A(params):
pass
print(A.__name__)
输出:
$ python -i foo.py
A
>>>
【讨论】:
【参考方案2】:使用functools.wraps
或手动更新wrapped_f 的__name__
属性。
from functools import wraps
def wrap(f):
@wraps(f)
def wrapped_f(*args, **kwargs):
# do something
return wrapped_f
@wrap
def A(params):
# do something
print(A.__name__)
【讨论】:
以上是关于包装函数的函数名? [复制]的主要内容,如果未能解决你的问题,请参考以下文章