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()吗?
首先,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现在有两座建筑物,第二座建筑物升级一次.这只是一个如何做到这一点的一般演示.如果没有关于您希望程序采用的方向的更多信息,我不能说更多.