def blahblah(func):
def wrapper(*args):
pass # blah blah blah....
return wrapper
@blahblah
def func1(arg1):
pass # blah blah blah
@blahblah
def func2(arg1):
pass # blah blah blah
functions = [func1, func2]
for func in functions:
print(func.__name__, func(0))
我想要的是获取此代码的原始名称,例如" func1"和" func2"。但是之前编写的代码只给了我" wrapper"和"包装"。有什么办法吗?在不更改包装代码的情况下更好。
wrapper None
wrapper None
func1 None
func2 None
答案 0 :(得分:5)
您可以使用functools.wraps
帮助函数,如下所示,它将保留包装函数的原始名称和文档字符串,例如:
from functools import wraps
def blahblah(func):
@wraps(func)
def wrapper(*args):
pass # blah blah blah....
return wrapper
@blahblah
def func1(arg1):
pass # blah blah blah
print(func1.__name__)
# func1
正如kojiro在评论中指出的那样,虽然这会保留名称和文档字符串,但有些事情需要注意 - https://hynek.me/articles/decorators/