我一直在尝试通过制作纸牌游戏来练习python类。简而言之,人类玩家可以从同一副牌上玩计算机。我的问题是如何使人类玩家和计算机访问同一卡座?
我创建了一个Player类,一个Computer类和一个Deck类。播放器类和计算机类都是Deck类固有的。在Deck类中,我有一个用于“ deck”的类变量。但是我注意到的是,如果将Deck方法应用于“ deck”类变量,然后将其作为播放器实例调用,则对“ deck”类变量的任何更改都将绑定到播放器实例,因此计算机实例将无法访问它。
也许我错过了一些东西,或者我打算彻底犯错,有人可以提供一些输入吗?
答案 0 :(得分:1)
播放器类和计算机类都是Deck类固有的
这不是理想的方法。仅当两个类在概念上满足“是”关系时,才应从另一个类继承。例如,狗应从动物继承,因为狗是动物。玩家不应从Deck继承,因为玩家不是套牌。
请尝试使套牌成为播放器和计算机对象的属性,而不是继承。如果卡座对象是可变的,则对两个对象都可见。
class Deck:
def __init__(self):
self.cards = ["Pot of Greed", "Black Lotus", "Ace of Spades", "Draw Four"]
class Player:
def __init__(self, name, deck):
self.name = name
self.deck = deck
class Computer:
def __init__(self, difficulty, deck):
self.difficulty = difficulty
self.deck = deck
d = Deck()
p = Player("Steve", d)
c = Computer("Easy", d)
#confirm that the player and computer decks are the same object
print(p.deck is c.deck)
#changes made to the deck via p will be observable from c and vice versa
p.deck.cards.append("How to Play Poker Instruction Card")
print(c.deck.cards)