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

