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

