为什么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
相关产品推荐
相关产品推荐

