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

Python如何正确打印自定义Card类组成的整副扑克牌栈

扑克牌堆打印问题解决方案

问题根本原因

Python 打印列表等容器类型时,会自动调用容器内部元素的__repr__方法输出信息,你当前仅为Card类实现了__str__方法,该方法只在直接打印单个Card对象时生效,因此打印包含Card对象的牌堆列表时会显示默认的内存地址。

可行解决方法

方案1:修改Card类新增__repr__方法(最推荐)

直接复用已有的__str__逻辑作为__repr__的实现,只需要在Card类中新增一行代码即可:

class Card:
    
    def __init__(self,suit,rank):
        self.suit = suit
        self.rank = rank
        self.value = values[rank]
        
    def __str__(self):
        return self.rank + ' of ' + self.suit
    
    # 新增此行
    __repr__ = __str__

修改后直接打印牌堆列表即可得到可读结果:

print(Deck().all_cards)
# 输出:['Two of Hearts', 'Three of Hearts', 'Four of Hearts', ... , 'Ace of Clubs']

方案2:不修改类定义,打印时手动转换

如果不想改动原有类代码,打印时用列表推导式把所有Card对象转成字符串后再输出即可:

deck = Deck()
print([str(card) for card in deck.all_cards])

方案3:为Deck类新增字符串方法,直接打印牌堆实例

如果需要频繁输出整副牌,可给Deck类添加__str__方法,后续直接打印Deck实例就能逐行显示所有牌:

class Deck:
    # 原有初始化、洗牌、发牌方法保持不变,新增以下方法
    def __str__(self):
        return '\n'.join(str(card) for card in self.all_cards)

使用效果:

print(Deck())
# 逐行输出所有牌面:
# Two of Hearts
# Three of Hearts
# ...
# Ace of Clubs

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:54:05