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

如何修改Python中类实例列表的print输出内容?

让自定义类实例列表的打印输出更友好

这个问题我太熟悉啦!Python里自定义类的实例默认打印出来就是类名加内存地址,这对我们理解列表内容完全没用对吧?别担心,只需要给你的MyClass加上一个特殊方法就能轻松解决~

为什么默认输出是内存地址?

Python中所有类都继承自object类,而object自带的__repr__方法就是返回类似<__main__.MyClass at 0x...>的字符串——这是Python对对象的默认“官方表示”,但对我们来说一点不直观。当你打印列表A时,Python会逐个调用列表中每个元素的__repr__方法,所以就出现了你看到的一堆内存地址。

解决方案:定义__repr__方法

我们只需要在MyClass里重写__repr__方法,返回一个能体现实例特征的字符串就行。这个方法会在打印对象(或者包含对象的列表)时被自动调用。

示例代码

class MyClass:
    def __init__(self, i):
        self.i = i
    
    # 重写__repr__方法,自定义实例的字符串表示
    def __repr__(self):
        # 这里我们返回包含实例i值的清晰描述
        return f"MyClass(i={self.i})"

# 创建实例列表
A = [MyClass(i) for i in range(10)]
# 现在打印列表看看效果
print(A)

输出效果

运行上面的代码,你会得到这样的输出:

[MyClass(i=0), MyClass(i=1), MyClass(i=2), MyClass(i=3), MyClass(i=4), MyClass(i=5), MyClass(i=6), MyClass(i=7), MyClass(i=8), MyClass(i=9)]

是不是一下子就清晰多了?

额外小知识:__repr__ vs __str__

可能你还会看到__str__方法,这里简单区分一下:

  • __repr__是对象的官方/正式表示,应该尽可能清晰且具备可重现性(比如能通过这个字符串重建对象最好),主要给开发者看,列表、字典等容器打印时会调用元素的__repr__。
  • __str__是对象的友好表示,更偏向给普通用户看,直接print(单个实例)时会调用它。

如果需要的话,你可以同时定义这两个方法,比如:

class MyClass:
    def __init__(self, i):
        self.i = i
    
    def __repr__(self):
        return f"MyClass(i={self.i})"
    
    def __str__(self):
        return f"这是一个MyClass实例,它的i值是{self.i}"

这样,print(MyClass(5))会输出友好的用户描述,而print(A)还是会用__repr__的正式表示,兼顾两种场景~

内容的提问来源于stack exchange,提问作者Matheus Popst de Campos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:22:05