【问题标题】:How to get the qualified name of the currently executing function?如何获取当前正在执行的函数的限定名?
【发布时间】:2012-08-24 18:57:02
【问题描述】:

Python 3.3 为函数对象和类对象引入了__qualname__ 属性。

获取当前执行函数的(非限定)名称和代码对象很容易。

但是如何获取当前正在执行的函数的限定名呢?

【问题讨论】:

  • 检查。我可以获得框架对象和代码对象。但我无法获得会产生 __qualname__ 的函数对象。
  • 当你说(不合格的)名字时,你的意思是__name__
  • 例如框架对象的非限定名称是inspect.stack()[0][0].f_code.co_name
  • 例如函数 f2 嵌套在函数 f1 中,作为嵌套在类 c1 中的类 c2 的方法,限定名称为:c1.c2.f1.<locals>.f2。对我来说更好的是:c1.c2.f1.f2.

标签: python-3.x


【解决方案1】:

你可以使用executing:

executing.Source.for_frame(frame).code_qualname(frame.f_code)

【讨论】:

    【解决方案2】:

    目前我认为你不能;见this thread

    Issue 13672 请求将co_qualname 添加到代码对象中,issue 12857 请求通过框架对象使调用的函数可用。两者都有补丁。

    【讨论】:

    • 谢谢。 Python 检查是拼凑而成,比有用的恕我直言更笨拙。但也许底层架构是笨拙的拼凑而成?
    • @carpetemporem 部分问题在于,检查必须在多种差异很大的实现之上工作:CPython、Jython、IronPython、PyPy 甚至 Stackless。
    • 是的,遗留代码。但是恕我直言,Python 3 可能是对一种语言进行根本性重新设计的机会,这种语言对于初学者来说很简单而且还不错,但变得越来越混乱。机会丢失了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    • 2012-01-10
    • 1970-01-01
    相关资源
    最近更新 更多