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

Python:如何在Table类方法中访问Deck类实例的deck变量

解决Table类访问Deck实例属性的问题

嘿,我来帮你搞定这个AttributeError的问题!

错误原因分析

你现在写的self.onTheTable = Deck.deck[:num]是在试图访问Deck类本身的deck属性,但实际上deck是Deck类的实例属性——只有当你创建了Deck的对象(比如代码里的deck = Deck()),这个具体的对象才会拥有deck列表,而Deck类本身并没有这个属性,所以才会报错。

两种可行的修改方案

方案1:给howManyCards方法传入Deck实例

直接把你已经创建好的deck实例作为参数传给howManyCards,这样就能访问到实例的deck属性了:

class Table():
    def __init__(self):
        self.onTheTable = []
    def howManyCards(self, num, deck_instance):
        # 取出前num张牌到桌面
        self.onTheTable = deck_instance.deck[:num]
        # 可选:如果需要模拟真实发牌,从牌堆移除已发的牌
        deck_instance.deck = deck_instance.deck[num:]

调用的时候改成这样:

deck = Deck()
deck.createDeck()
table = Table()
table.howManyCards(10, deck)  # 传入已创建的deck实例

方案2:在Table初始化时绑定Deck实例

如果你的Table对象一直和同一个Deck关联,可以在初始化Table的时候就把Deck实例传进去,保存为Table的属性,这样后续调用方法就不用每次传参数了:

class Table():
    def __init__(self, deck_instance):
        self.onTheTable = []
        self.associated_deck = deck_instance  # 保存Deck实例的引用
    def howManyCards(self, num):
        self.onTheTable = self.associated_deck.deck[:num]
        # 可选:移除牌堆中的已发牌
        self.associated_deck.deck = self.associated_deck.deck[num:]

调用方式修改为:

deck = Deck()
deck.createDeck()
table = Table(deck)  # 初始化时传入Deck实例
table.howManyCards(10)

完整测试代码(方案1)

class Card:
    def __init__(self, figure, colour):
        self.colour = colour
        self.figure = figure
    def __repr__(self):
        return str(self.figure) + str(self.colour)

class Deck:
    def __init__(self):
        self.deck = []
    def createDeck(self):
        for colour in ["h", "d", "c", "s"]:
            for figure in ["2", "3", "4", "5", "6", "7", "8", "9", "T", "J", "Q", "K", "A"]:
                self.deck.append(Card(figure, colour))

class Table():
    def __init__(self):
        self.onTheTable = []
    def howManyCards(self, num, deck_instance):
        self.onTheTable = deck_instance.deck[:num]
        deck_instance.deck = deck_instance.deck[num:]

# 运行测试
deck = Deck()
deck.createDeck()
table = Table()
table.howManyCards(10, deck)

print("桌面的10张牌:", table.onTheTable)
print("牌堆剩余牌数:", len(deck.deck))  # 输出42,因为52-10=42

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:09:08