Python:如何实现多继承?[重复]

问题描述 投票:0回答:2

oop的新手。用Python 3编写。

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

  • 一个 "服务器 "类 -- 这是一个主要的入口点,所有的一切都从这里开始。
  • 一个包含游戏逻辑的类'游戏'。
  • 一个类'游戏室',允许多个游戏同时运行。
  • 一个包含所有玩家资料的 "玩家 "类。
  • 一个类'session',它是玩家和游戏的结合体,包含玩家在游戏中的相关信息。

diagram of classes

看起来很明显,session应该是玩家和gameroom的子实例,但是,session的实例如何知道gameroom和玩家的哪个实例是它的父母呢?然而,session的实例如何知道gameroom和player的哪个实例是它的父母?

假设

  • 我有5个玩家实例,玩家ID是1,2,3,4和5
  • 我有2个房间ID为1和2的gameroom实例,现在我想要一个玩家ID=2和房间ID=2的'session'实例。

现在我想要一个 "session "的实例,玩家ID=2,房间ID=2。 我如何将房间ID和玩家ID "传递 "到新的session实例?

这是正确的实现吗?或者我可以用某种方式隐式地创建一个session的实例,而不需要将player和room保存在一个变量中?

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))
python oop subclass multiple-inheritance
2个回答
2
投票

继承在这里不是正确的工具。你应该只通过一个 player 和a room 实例到 __init__ 方式 session.

继承是用来模拟类的扩展。如果一个类继承了另一个类,如 Car 继承 Vehicle 而你实例化了一个 Car 含有 car = Car(), car 也是一个例子 Vehicle.

您可以在本手册的应用部分阅读更多关于此主题的内容。维基百科文章 继承上。


0
投票

类似这样,假设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))
© www.soinside.com 2019 - 2024. All rights reserved.