我正在创建一个基本游戏来帮助理解类,其中 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/