Python 指装饰器内部装饰函数的名称
在装饰器内部,我可以引用被装饰对象的名称吗?例如:Python 指装饰器内部装饰函数的名称,python,python-3.x,Python,Python 3.x,在装饰器内部,我可以引用被装饰对象的名称吗?例如: def add_debug_info(func): # how to write magic_function? name = magic_function(func) # name is 'execute' when applied as # @add_debug_info # def execute(): 我试图打印包含这个名称的调试语句,因为我传递的是更高级别的函数,很难判断调试语句引用的是哪个函
def add_debug_info(func):
# how to write magic_function?
name = magic_function(func)
# name is 'execute' when applied as
# @add_debug_info
# def execute():
我试图打印包含这个名称的调试语句,因为我传递的是更高级别的函数,很难判断调试语句引用的是哪个函数
我只知道如何获取对象的名称,但它在这里不起作用(多个名称可以引用一个对象,但我想要一个碰巧被修饰过的特定名称)。函数的原始名称存储在
\u name\u
属性中:
>>> def foo(): pass
...
>>> foo.__name__
'foo'
>>> bar = foo
>>> bar.__name__
'foo'
您可以在中找到类似这样的有趣信息,许多信息也在的文档中进行了总结
您可能还想看看,它使用原始包装函数的属性更新包装函数(通常用于装饰程序),包括其名称和文档字符串。函数的原始名称存储在
属性中
>>> def foo(): pass
...
>>> foo.__name__
'foo'
>>> bar = foo
>>> bar.__name__
'foo'
您可以在中找到类似这样的有趣信息,许多信息也在的文档中进行了总结
您可能还想看一下,它使用原始包装函数的属性更新包装函数(通常在装饰程序中使用),包括它的名称和文档字符串。你可以使用func.\uuu name\uuu
或func.func\u name
我相信…@mgilson:\uu name\uuu
是现在的首选拼写法,因为它不仅仅适用于函数。@MartijnPieters--我知道有一个是首选的,但我不记得是哪个了。因此,这就是为什么我没有发布答案的原因——希望这次我会记得:)你可以使用func.\uu name\uuu
或func.func\u name
我相信…@mgilson:\uu name\uuu
是现在的首选拼写,因为它不仅仅适用于函数。@MartijnPieters——我知道有一个是首选的,但我不记得是哪个。因此,这就是我没有发布答案的原因——希望这次我还记得:)