实例如何包含其他类的多个实例?

aaa*_*dan 2 python oop inheritance class

我正在创建一个基本游戏来帮助理解课程,Player()实例(Ben)拥有许多建筑物和单元.每个玩家,如本将拥有各种建筑物,如飞机工厂或Bot工厂.

class Player:

    def __init__(self):
        self.money = 200
        self.score = 0
        print('Created ')

    def increase_money(self, amount):
        self.money += amount

    def decrease_money(self, amount):
        self.money -= amount

    def check_money(self):
        print(self.money)


class Building(Player):

    def __init__(self):
        self.level = 0
        self.upgrade_cost = 100
        print('created building')

    def upgrade_building(self):
        self.level += 1

    def check_building_level(self):
        print(self.level)

ben = Player()
Run Code Online (Sandbox Code Playgroud)

我已经意识到,如果我调用Building()类来创建一个实例,它实际上会创建一个继承了播放器属性的构建实例(即每个构建都有自己的钱).

我如何让每个玩家包含不同属性的各种建筑物和单位?例如,本和比尔有不同的建筑物.在这种情况下,我会使用单个Player()类然后使用里面的函数Player()吗?

tim*_*geb 6

首先,Building继承Player是没有多大意义的,一种是 - 一种关系Building,Player似乎很奇怪,就像一个语义错误.

只是不要继承Player,即:

class Building(object):
     # code for the class
Run Code Online (Sandbox Code Playgroud)

现在,对于您的另一个问题,如果您希望每个Player实例能够聚合多个Building对象实例,则可以使每个实例都Player具有一个集合属性(列表或集合)来存储Building实例.

要实现此目的,您可以添加该行

self.buildings = []
Run Code Online (Sandbox Code Playgroud)

__init__方法Player.最初,此列表将为空.要为特定玩家添加建筑物,请附加到其buildings属性,例如:

p = Player()
p.buildings.append(Building())
p.buildings.append(Building())
p.buildings[1].upgrade_building()
Run Code Online (Sandbox Code Playgroud)

玩家p现在有两座建筑物,第二座建筑物升级一次.这只是一个如何做到这一点的一般演示.如果没有关于您希望程序采用的方向的更多信息,我不能说更多.