【问题标题】:Python: how to implement multiple-inheritance? [duplicate]Python:如何实现多重继承? [复制]
【发布时间】:2020-08-09 04:32:24
【问题描述】:

oop 新手。用 Python 3 编写。

我正在开发一款多人游戏。 这些是我需要的课程:

  • “服务器”类 - 这是一切开始的主要入口点
  • “游戏”类,包含游戏逻辑
  • 允许同时运行多个游戏的“游戏室”类
  • 一个包含所有玩家详细信息的“玩家”类
  • 一个“会话”类,它是玩家和游戏的组合,包含玩家在玩游戏时的相关信息

显然 session 应该是 player 和 gameroom 的孩子。然而,一个 session 的实例如何知道 gameroom 和 player 的哪个实例是它的父母呢?

假设:

  • 我有 5 个播放器实例,播放器 ID 分别为 1、2、3、4 和 5
  • 我有 2 个游戏室实例,房间 ID 为 1 和 2。

现在我想要一个 playerID = 2 和 roomID = 2 的“会话”实例。如何将 roomID 和 playerID“传递”到新的会话实例?

这是正确的实现吗?或者我可以以某种方式隐式创建会话实例,而无需将玩家和房间保存在变量中?

from player import player
from room import room

class session(player,room):
    def __init__(self, player: player, room: room):
        self.point = 0
        self.player = player
        self.room = room
        print('player {} has joined room {}'.format(player.id,room.id))

【问题讨论】:

  • TBH 会话是专门的玩家这一点并不明显 - 会话有多个玩家的多人游戏怎么样 - 措辞告诉我玩家是会话的属性,即没有遗产。总的来说,我的建议是尽可能避免多重继承和深度继承树。

标签: python oop subclass multiple-inheritance


【解决方案1】:

继承在这里不是正确的工具。您应该只将playerroom 实例传递给session__init__ 方法。

继承用于对类的扩展进行建模。如果一个类继承另一个类,例如Car 继承 Vehicle 并用car = Car() 实例化一个Car 对象,car 也是Vehicle 的一个实例。

您可以在wikipedia article 关于继承的应用程序部分阅读更多关于此主题的信息。

【讨论】:

    【解决方案2】:

    类似这样,假设 Player 和 Room 具有实例属性 name 和 roomID

    class Session(Player,Room):
        def __init__(self, name, roomID ):
            Player.__init__(self, name)
            Room.__init__(self, roomID)
            self.point = 0
            print('player {} has joined room {}'.format(name,roomID))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-04
      • 2011-11-21
      • 1970-01-01
      • 1970-01-01
      • 2012-11-17
      • 2020-05-16
      • 2014-07-13
      相关资源
      最近更新 更多