Python黑杰克游戏类对象转列表问题及类一致性维护咨询
解决Python黑杰克游戏中Deck类存储Card实例的问题
嘿,我看你在写黑杰克游戏的时候碰到了个小坑——明明定义了Card类,但把卡片存到Deck里之后,它们就变成普通列表了,导致Card的实例方法没法生效?这问题我之前也踩过,咱们来一步步解决它。
问题根源
你代码里的核心问题出在Deck类的populate_deck方法中:
def populate_deck(self): for s in Card_Class.suit : for v in Card_Class.value: self.deck.append([s, v]) # 这里添加的是普通列表,不是Card实例! return self.deck
你现在往self.deck里添加的是[s, v]这种普通列表,而不是Card类的实例对象。所以当你调用get_card方法时,返回的自然是列表,而不是Card对象,那肯定用不了Card类里定义的属性和方法呀。
修正方案
只需要把populate_deck里的代码改成创建Card实例再添加到deck里就行,修改后的Deck_Class.py代码如下:
import Card_Class import random class Deck(): def __init__(self): self.deck = [] def populate_deck(self): for s in Card_Class.suit : for v in Card_Class.value: # 创建Card类的实例,而不是普通列表 new_card = Card_Class.Card(s, v) self.deck.append(new_card) return self.deck def get_card(self): return self.deck[0]
验证效果
现在你再调用populate_deck后,self.deck里存储的就都是Card类的实例了。比如你可以测试:
deck = Deck() deck.populate_deck() card = deck.get_card() print(type(card)) # 输出 <class 'Card_Class.Card'> print(card.suit, card.value, card.score) # 正常访问Card的属性
这样就能正常使用Card类的实例方法和属性了。
内容的提问来源于stack exchange,提问作者tom roddick
相关产品推荐
相关产品推荐

