You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python获取当前函数__qualname__的简单可靠实现方法

我需要获取当前函数的限定名称,也就是类似函数或类属性的__qualname__值,但inspect.stack()仅能返回简单的非限定名称。

因此我希望能通过现有内省信息计算得到限定名称。由于不了解Python内部表示机制,我尝试了多次试错仍未找到可行方法。Python本身可以计算限定名称,说明所需的所有信息都已存在,只是我不清楚获取路径。

我在Stack Overflow上搜索到了几种解决方案,但都存在缺陷:

检查栈帧本地变量

该方法由@Aran-Fey提出,核心逻辑是扫描栈的本地变量,返回第一个出现的__qualname__:

def retrieveQualifiedName():
    f = inspect.currentframe()
    while f:
        if '__qualname__' in f.f_locals:
            return f.f_locals['__qualname__']
        f = f.f_back
    return None

该方法对直接嵌套在其他类中的类有效,但如果嵌套层级中存在函数就会失效。

适用场景示例:

class A:
    class B: pass

失效场景示例:

class A:
    def a(self):
        class B: pass
        return B()

借助第三方executing库实现

@Alex Hall建议使用第三方内省库executing实现:

import executing
def retrieveQualifiedName():
    f = inspect.currentframe().f_back.f_back
    return executing.Source.executing(f).code_qualname()

该库计算限定名称的准确性很高,但有两个问题促使我寻找其他方案:一是引入第三方依赖会提高维护成本,无法直接用于简单脚本编写,需要完整的项目定义和构建流程,我希望尽可能避免这种情况;二是executing库需要解析源代码来推断限定名称,会产生额外的性能开销,我更希望直接从解释器已有的信息中提取限定名称。


内容的提问来源于stack exchange,提问作者ivan golotin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 10:54:03