【发布时间】: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!
【问题讨论】:
标签: python
如何获取原始函数的名称?
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!
【问题讨论】:
标签: python
直接来自文档:
如果不使用这个装饰器工厂,示例函数的名称将会是 '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
>>>
【讨论】:
使用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__)
【讨论】: