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

Python子类访问父类实例变量报错:修复TexasHoldem无table属性问题

问题修复方案

错误原因

你在hands方法里直接用TexasHoldem.table访问桌面牌,这是在访问类属性,但你的deal方法是把table和玩家手牌作为实例属性创建的(比如self.table、self.players_hands这类),所以类本身没有table属性,就会抛出AttributeError。

修复步骤

  • 确保hands是实例方法,第一个参数必须为self
  • 在方法内通过self访问实例属性:
    • 用self.table获取桌面公共牌
    • 用你在deal里定义的玩家手牌实例属性(比如self.players_hands)获取每位玩家的手牌
  • 将每位玩家的手牌与桌面牌合并后,调用check_hand方法判断最佳牌型

示例代码片段

class TexasHoldem(Poker):
    def deal(self):
        # 发牌逻辑,生成实例属性存储玩家手牌和桌面牌
        self.players_hands = [['Ah', 'Kh'], ['Qs', 'Js']]  # 示例玩家手牌
        self.table = ['2c', '3d', '5h', '7s', '9d']  # 示例桌面公共牌

    def hands(self):
        result = []
        # 遍历每位玩家的手牌,合并桌面牌后判断最佳牌型
        for hand in self.players_hands:
            combined_cards = hand + self.table
            best_hand_type = self.check_hand(combined_cards)
            result.append({
                'player_hand': hand,
                'best_hand': best_hand_type
            })
        return result

关键提醒

  • 所有依赖实例状态(比如发牌后的牌组、桌面牌)的方法,都得是实例方法,并且通过self访问属性
  • 类属性是所有实例共享的静态数据,而每局德州扑克的牌组、桌面牌是单个实例的动态状态,必须存在实例属性里,不能用类名直接访问

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 07:30:39