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

标签 python class oop inheritance

我正在创建一个基本游戏来帮助理解类,其中 Player() 实例 (Ben) 拥有许多建筑物和单位。每个玩家,例如本,都会拥有各种建筑物,例如飞机工厂或机器人工厂。

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()

我已经意识到,如果我调用 Building() 类来创建一个实例,它实际上会创建一个继承玩家属性的建筑实例(即每个建筑都有自己的钱)。

我如何让每个玩家包含具有不同属性的各种建筑物和单位?例如,Ben 和 Bill 有不同的建筑物。在这种情况下,我会使用单个 Player() 类,然后使用 Player() 内部的函数吗?

最佳答案

首先,Building继承自 Player没有多大意义,Building 之间的关系和 Player看起来很奇怪,像是语义错误。

只是不要继承Player ,即:

class Building(object):
     # code for the class

现在回答你的另一个问题,如果你想要每个 Player能够聚合 Building 的多个实例对象,你可以创建 Player 的每个实例有一个集合属性(列表或集合)来存储 Building实例。

为此,您可以添加行

self.buildings = []

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

p = Player()
p.buildings.append(Building())
p.buildings.append(Building())
p.buildings[1].upgrade_building()

播放器p现在有两栋楼,第二栋升级一次。这只是您如何操作的一般演示。如果没有更多关于您希望您的程序采取的方向的信息,我不能说更多。

关于python - 一个实例如何包含其他类的多个实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34886973/

相关文章:

java - 如何解决 ClassNotFoundException?

c++ - 如何使用 C++ 模板参数来决定类中的成员类型

php - 我应该如何设置我的类(class)?

python - 不可能捕获 asyncio.TimeoutError 吗?

python - 更新成对 Pandas df中的值

c++ - 如何在类中存储常量数组?

c# - 在需要时从接口(interface)转换为某个具体类是一种好习惯吗?

python - 在 Python CGI 中返回 http 状态代码

python - continue 无法在 for 循环中使用 if 语句 ('continue' 无法正确地在循环中工作)

c++ - 如何访问成员变量sqlite回调