为了账号安全,请及时绑定邮箱和手机立即绑定

有没有办法从 Python 中的两个不同对象访问同一个对象?

有没有办法从 Python 中的两个不同对象访问同一个对象?

catspeake 2021-12-26 10:31:06
我一直在尝试通过制作纸牌游戏来练习 Python 课程。简单地说,人类玩家可以从同一副牌中玩电脑。我的问题是如何让人类玩家和计算机访问同一副牌?我创建了一个 Player 类、一个 Computer 类和一个 Deck 类。Player 类和 Computer 类都具有 Deck 类。在 Deck 类中,我有一个用于“deck”的类变量。但我注意到的是,如果我将 Deck 方法应用于“deck”类变量,然后将其作为播放器的实例调用,则对“deck”类变量的任何更改都与播放器实例相关联,因此计算机实例将无法访问它。也许我错过了一些东西,或者我完全错了,有人可以提供一些意见吗?
查看完整描述

1 回答

?
冉冉说

TA贡献1877条经验 获得超1个赞

Player 类和 Computer 类都固有的 Deck 类


这不是理想的方法。如果两个类在概念上满足“是一个”关系,则该类应仅从另一个类继承。例如,Dog 应该从 Animal 继承,因为狗是一种动物。牌手不应继承牌组,因为牌手不是牌组。


与其继承,不如尝试使牌组成为玩家和计算机对象的属性。如果甲板对象是可变的,则对它的更改将从两个对象都可见。


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)


查看完整回答
反对 回复 2021-12-26
  • 1 回答
  • 0 关注
  • 259 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号