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——我知道有一个是首选的,但我不记得是哪个。因此,这就是我没有发布答案的原因——希望这次我还记得:)