python - 从实例而不是类继承 [Python 3]

标签 python class oop inheritance

我想启动一个子类的多个实例,每个实例从一个类的特定实例而不是一般类中获取它们的属性。

例如,如果我有建筑物和房间,则每个房间都需要属于建筑物的特定实例,采用其属性和方法。

class Building:
     def __init__(self, buildingName, location):
        self.buildingName = buildingName
        self.location = location
        # lots more intersting stuff

    def Evacuate_Building(self):
        # do some stuff
        pass

class Room(Building):
     def __init__(self, roomName, roomType):
        self.roomName = roomName
        self.roomType = roomType
        # lots more intersting stuff

    def Directions(self, Current_Location):
        '''do some stuff involving this.roomName and this.location which comes from the specific instance of the class'''
        pass

所以说我有三座建筑物:“北”、“南”和“西”。

每栋楼都有自己的房间。

只看北楼,它有房间“N1”、“N2”、“N3”、“N4”。

在我的代码中,我将首先遍历并启动三个建筑物,然后我将启动房间,一些如何将它们链接回相应的建筑物。

这允许我使用 Directions 方法,该方法使用来自其父类实例的属性位置,该属性对于该建筑物而言是唯一的,而不是通用值。它还需要能够使用来自父类 Evacuate_Building 的方法。

我可以通过每次使用 super(buildingName, location) 或 Building.__ init__(self, buildingName, location) 在更标准的设置中启动房间时传递位置数据来解决这个问题,但这意味着我必须为每个房间,如果我在建筑物中添加或更改某些内容,如果添加了其他属性,我需要更改每个房间的初始化和初始化代码。

我还可以通过将 Building 的实例作为参数传递给 init ,然后执行 this.location = building.location 来复制属性,但这也存在与上述相同的问题,而且我无法通过这种方式获取方法。

我想要某种方式传递 Building 的特定实例,以便房间继承其特定属性和方法。

欢迎任何反馈,建议,批评,完全不同的方法! 先感谢您!

最佳答案

A Room不是 Building ==> Room不应该是 Building 的子类.
A Building有很多Room ==> 使用组合。

一种可能的方法是让每个 Building收藏了Room

class Building:
    def __init__(self, name, location):
        self.name = name
        self.location = location
        self.rooms = []            # or a set as in @Abamert's reply
                                   # or dict if you want to address it by floor and number, maybe?
    def add_room(self, room):
        self.rooms.append(room)

class Room:
    def __init__(self, name, model):
        self.name = roomName
        self.model = model

也许,您还可以让房间引用它们所在的建筑物;此引用可以是在向建筑物添加房间时分配的属性:
class Building:
    ...
    def add_room(self, room):
        room.bldg = self
        self.rooms.append(room)

关于python - 从实例而不是类继承 [Python 3],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51461210/

相关文章:

python - 如何从matlab调用python类的 "__call__()"方法

Python:将函数作为参数传递以初始化对象的方法。 Pythonic 与否?

python - Gensim 的 Doc2vec 中的 Index2word 引发属性错误

python - 循环遍历所有 JSON 子项

python - 如何杀死扭曲的协议(protocol)实例python

Python 将值从一个方法传递到另一个方法

c++ - 是否有可能在编译时得到一个包含命名空间和类名的字符串?

python - 为类分配两个函数?

oop - 在 Haskell 中扩展数据结构的继承

c++ - 类 'Entity' 中类 'Component' 的指针变量,即使包含 'Entity.h' 也会出错