繁体   English   中英

在由函数装饰器包装后,如何获得函数的原始名称?

[英]How to get the original name of a function after it is wrapped by function decorator?

编码

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 None
  wrapper None

理想输出

  func1 None
  func2 None

您可以按如下方式使用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

由于小次郎在评论中指出,虽然这保留的名称和文档字符串,有一些事情要注意的- https://hynek.me/articles/decorators/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM