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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:13:07