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

如何在不传入参数的情况下让Matrix类实例打印时显示变量名?

实现Matrix类打印时自动显示变量名的方案

不用传变量名参数也能做到,靠谱的方法是利用Python的inspect模块获取调用栈信息,反向查找指向当前矩阵实例的变量名,比爬代码文件靠谱多了。

直接上代码示例

import inspect

class Matrix:
    def __init__(self, matrix_str):
        # 先把输入的字符串转成二维数组
        self.data = [list(map(int, row.split('&'))) for row in matrix_str.split('@')]
    
    def _find_var_name(self):
        # 拿到调用print时的栈帧,跳过当前方法和__str__的栈帧
        caller_frame = inspect.currentframe().f_back.f_back
        # 先查局部变量,再查全局变量
        for name, obj in caller_frame.f_locals.items():
            if obj is self:
                return name
        for name, obj in caller_frame.f_globals.items():
            if obj is self:
                return name
        # 找不到就返回默认名
        return "Unknown"
    
    def __str__(self):
        var_name = self._find_var_name()
        # 组装矩阵每一行的字符串
        row_lines = [f"   | {' '.join(map(str, row))} |" for row in self.data]
        # 拼接头部、矩阵行和尾部
        header = f"---Matrix {var_name}---"
        footer = "-" * len(header)
        return '\n'.join([header] + row_lines + [footer])

# 测试一下
Bob = Matrix("2&3&4@4&5&6@6&7&8")
print(Bob)

要注意的局限

  • 如果同一个矩阵实例被多个变量引用,只会返回第一个找到的那个变量名。
  • 在IPython这类交互式环境,或者嵌套函数、闭包这类复杂作用域里,可能找不到正确的变量名。
  • 要是直接打印匿名实例(比如print(Matrix("2&3&4"))),会显示"Unknown"。
  • 性能上有一点点开销,但普通场景完全不用在意。

你说的爬代码文件的方法确实坑,不仅要处理各种代码结构干扰,代码打包或者动态生成的时候直接失效,完全没必要用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 18:25:33