有没有一种方法可以从Python中的两个不同对象访问同一对象?

时间:2019-04-02 12:23:48

标签: python

我一直在尝试通过制作纸牌游戏来练习python类。简而言之,人类玩家可以从同一副牌上玩计算机。我的问题是如何使人类玩家和计算机访问同一卡座?

我创建了一个Player类,一个Computer类和一个Deck类。播放器类和计算机类都是Deck类固有的。在Deck类中,我有一个用于“ deck”的类变量。但是我注意到的是,如果将Deck方法应用于“ deck”类变量,然后将其作为播放器实例调用,则对“ deck”类变量的任何更改都将绑定到播放器实例,因此计算机实例将无法访问它。

也许我错过了一些东西,或者我打算彻底犯错,有人可以提供一些输入吗?

1 个答案:

答案 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)
相关问题