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

为什么Python打印自定义类实例列表显示内存地址,按下标打印正常?

问题原因

Python中直接打印列表、字典这类容器时,容器内部元素的展示会调用元素的__repr__方法,而非__str__方法。你只给Card类实现了__str__,所以单独打印单个实例可以正常输出,打印包含实例的列表时就会输出默认的内存地址格式。

解决方法

方法1:给Card类补充__repr__方法(推荐)

你可以直接将__repr__指向已实现的__str__,也可以单独写展示逻辑,修改后的代码如下:

class Card:
    def __init__(self,suit,rank):
        self.suit=suit
        self.rank=rank

    def __str__(self):
        return f'{self.rank} of {self.suit}'
    
    # 补充这一行即可
    __repr__ = __str__

allcards=[]
allcards.append(Card('Spades','Jack'))
print(allcards)

此时输出就会变成[Jack of Spades],符合预期。

方法2:打印时手动转换列表元素(不想修改类定义时用)

如果不想改动原有Card类的代码,可以在打印时把每个元素手动转成字符串再打印:

print([str(card) for card in allcards])

这种方式也能得到同样的可读输出。

内容的提问来源于stack exchange,提问作者Vamshi Krishna Reddy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 04:51:01