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

Python中如何让Card与Deck类以字符串形式正确输出?

解决Python中Card/Deck类打印对象而非牌面信息的问题

问题出在你的Card类没有定义字符串转换方法,Python默认会用对象的内存地址等信息生成字符串表示,而非你想要的牌面内容。下面是具体修复方案:

1. 给Card类添加__str__方法

__str__是Python内置特殊方法,当你使用print()或者str()转换对象时,会调用这个方法返回的字符串。给Card类添加该方法,就能自定义牌面的显示格式:

class Card:
    def __init__(self, suit, value):
        self.suit = ['Spade', 'Hearts', 'Diamonds', 'Clubs'][suit]
        self.value = ['Ace','2','3','4','5','6','7','8','9','10','Jack','Queen','King'][value]
    
    def reveal(self):
        print('Card is ' + self.value + ' of ' + self.suit)
    
    # 新增__str__方法,自定义对象的字符串表示
    def __str__(self):
        return f"{self.value} of {self.suit}"
    
    # 可选:添加__repr__方法,调试时打印列表中的Card对象也能显示牌面
    def __repr__(self):
        return self.__str__()

2. 调整Deck类的reveal方法(可选)

原来的Deck.reveal()返回Card对象列表,直接打印列表时若无__repr__仍会显示默认对象信息。可以修改reveal方法直接打印所有牌,或者返回字符串列表:

class Deck:
    def __init__(self):
        self.card = []
        for s in range(4):
            for v in range(13):
                self.card.append(Card(s,v))
        shuffle(self.card)
    
    def reveal(self):
        # 遍历打印所有牌
        for card in self.card:
            print(card)
        # 或者返回所有牌的字符串列表
        # return [str(card) for card in self.card]
    
    def draw(self):
        if not self.card:
            return 'No more cards'
        else:
            return self.card.pop()

测试示例

现在可以正常打印牌面信息:

deck = Deck()
# 抽一张牌并打印
drawn_card = deck.draw()
print(drawn_card)  # 输出类似:King of Hearts
# 显示剩余所有牌
deck.reveal()

修改后,无论是直接打印Card对象,还是打印包含Card对象的列表,都会显示预期的牌面信息,而非默认的对象内存地址描述。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 13:41:41