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

姆克波利

代码

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按如下方式使用helper函数,函数将保留包装函数的原始名称和doc字符串,例如:

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/

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何获得函数的装饰器?

来自分类Dev

如何使用原始名称为库函数创建包装器?

来自分类Dev

装饰器:参数如何传递给包装函数?

来自分类Dev

使用functools.wraps装饰的函数使用包装器的名称引发TypeError。为什么?如何避免?

来自分类Dev

Python装饰器:如何按装饰器列出包装的函数

来自分类Dev

Python装饰器:如何按装饰器列出包装的函数

来自分类Dev

如何避免python装饰器函数中的名称冲突

来自分类Dev

装饰器返回函数对象而不是包装函数的输出

来自分类Dev

如何获得函数的原始地址?

来自分类Dev

使用包装函数中的变量的python装饰器参数

来自分类Dev

在装饰器中访问原始函数变量

来自分类Dev

记忆装饰器的运行速度比原始函数慢

来自分类Dev

您如何获得函数的原始地址?

来自分类Dev

如何显示来自函数装饰器的消息?

来自分类Dev

包装函数的函数名称?

来自分类Dev

装饰器:TypeError:“在函数调用中获得了关键字参数<变量名称>的多个值”

来自分类Dev

我应该如何在不更改函数名称的情况下使用python装饰器?

来自分类Dev

Python函数装饰器应打印完整的方法名称

来自分类Dev

我们必须在装饰器的包装函数中使用函数值吗?

来自分类Dev

LLVM-如何通过函数的真实/原始名称获取函数

来自分类Dev

如何模拟装饰函数

来自分类Dev

在定义函数后装饰它?

来自分类Dev

如何获得传递给函数的模型名称?

来自分类Dev

C ++函数包装器

来自分类Dev

C ++函数包装器

来自分类Dev

装饰函数未传递给装饰器

来自分类Dev

如何使用Class装饰器包装器?

来自分类Dev

如何获得最终包装名称?

来自分类Dev

如何包装回调函数以在WinJS中获得承诺?

Related 相关文章

热门标签

归档