Python OOP卡牌游戏报错:type object 'Deck' has no attribute 'cards'
AttributeError: type object 'Deck' has no attribute 'cards' 问题分析与解决
错误原因
你犯了Python面向对象的基础错误:没有创建Deck类的实例,而是直接把类本身赋值给了deck变量。
self.cards是实例属性——只有调用Deck()创建类的实例时,__init__方法才会执行,进而初始化self.cards列表。而Deck本身是类对象,它并没有cards这个属性,直接用类访问cards自然会抛出AttributeError。
解决方法
把创建deck的代码从:
deck = Deck
修改为:
deck = Deck()
这行代码会调用Deck的构造方法生成实例,同时触发__init__初始化cards列表,之后就能正常访问deck.cards了。
修改后的完整代码
class Card: def __init__(self, name, suit): self.name = name self.suit = suit def print_card(self): print(self.name, self.suit) class Deck: def __init__(self): self.cards = [] names = ("A", "K", "Q", "J", "T", "9", "8", "7", "6", "5", "4", "3", "2") suits = ("D", "C", "H", "S") for name in names: for suit in suits: card = Card(name, suit) self.cards.append(card) # 创建Deck类的实例 deck = Deck() for card in deck.cards: card.print_card()
内容的提问来源于stack exchange,提问作者Yoshith Kotla
相关产品推荐
相关产品推荐

