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

如何在Python类的方法中获取并打印类实例的变量名?

获取Python类实例的变量引用名

首先得说清楚:Python的实例本身并不记录它被赋值给的变量名——因为一个实例可以被多个变量引用(比如abc = Example(True); another_ref = abc),这时候根本不存在“唯一的变量名”。不过针对你这种直接赋值的简单场景,我们可以通过解析调用栈的源代码来实现需求。

解决方法:使用inspect模块解析调用上下文

我们可以借助inspect模块获取创建实例时的调用帧,然后解析源代码提取变量名:

修改你的类文件代码:

import inspect

class Example():
    def __init__(self, x):
        self.x = x
        if self.x == True:
            # 获取创建实例的调用帧(当前帧的上一级)
            caller_frame = inspect.currentframe().f_back
            # 获取调用帧的源代码
            source_lines = inspect.getsource(caller_frame).split('\n')
            # 遍历代码行,找到创建Example(True)的那一行
            for line in source_lines:
                if 'Example(True)' in line.strip():
                    # 分割等号左侧内容,得到变量名
                    var_name = line.split('=')[0].strip()
                    print(var_name)
                    break

主程序代码保持不变:

from class_file import Example

abc = Example(True)

运行后就会输出abc,符合你的期望。

注意事项(局限性)

这种方法是基于解析源代码的,有不少限制:

  • 如果创建实例的代码不是单独一行(比如abc = Example(True) if some_condition else None),解析会失败
  • 如果同一行有多个实例创建,或者变量名和实例创建不在同一行,也无法正确提取
  • 如果实例是在函数、循环或其他复杂上下文里创建,这种简单的字符串匹配逻辑会失效

本质上,Python并没有把“变量名”和“实例”绑定的机制,这种方法只是一种hack,适合简单的演示场景,不建议在生产代码中使用。

另外你提到的__name__属性,它是类的属性,返回的是类的名称(比如Example),和实例的引用变量名完全不是一回事,所以用它肯定得不到想要的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 17:36:10