如何获取原始功能的名称?
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!
答案 0 :(得分:6)
直接来自文档:
如果不使用这个装饰工厂,示例函数的名称就是'包装',原始example()的docstring就会丢失。
示例:强>
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
>>>
答案 1 :(得分:5)
使用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__)