在 python 中的 for 循环内声明 class 属性
Declare class attributes inside a for loop in python
我正在尝试制作一款盗版《部落冲突》的游戏。首先要做的是为攻击阶段使用的部队和法术创建 classes。我已经定义了一个 class 部队,它是一个将军 class,其想法是在声明特定部队时它的所有属性都会被覆盖。
这是准系统class
class Troop():
def __init__(self):
self.fav_target = 'any'
self.damage_type = 'single' #or 'area'
self.targets = 'ground'
self.space = 1
self.speed = 1
self.dps = 1
self.hp = 1
self.type = 'ground' #or 'air'
self.level = 1
self.attack_rate = 1
Clash of clans有很多部队,每个部队的属性(如hp,dps)随着等级而变化。现在我只实现了最高级别的那些属性。
为了保存特定部队的所有属性值,我声明了字典。这是 "Barbarian" 部队的属性字典。格式为 {'<troop lvl>': {'<attr>': <value>}}
barbs = {'9': {'fav_target': 'any', 'damage_type': 'single', 'targets': 'ground', 'space': 1, 'speed': 16,
'dps': 38, 'hp': 230, 'type': 'ground', 'attack_rate': 1}}
我没有手动覆盖野蛮人 class 中的每个属性,而是使用 for 循环来覆盖野蛮人 class 中的所有属性,如下所示:
class Barbarian(Troop):
def __init__(self):
super(Barbarian, self).__init__()
self.name = 'Barbarian'
for attr in barbs['9']:
self.attr = barbs['9'][attr]
问题是当我打印 Barbarian.hp 时,它 return Troop class 而不是 Barbarian class 中的值。如果我删除 super() 语句,则打印 Barbarian.hp 之类的内容会给出 AttributeError。
有没有办法在 for 循环中覆盖(或声明)class 中的属性?
我正在尝试制作一款盗版《部落冲突》的游戏。首先要做的是为攻击阶段使用的部队和法术创建 classes。我已经定义了一个 class 部队,它是一个将军 class,其想法是在声明特定部队时它的所有属性都会被覆盖。 这是准系统class
class Troop():
def __init__(self):
self.fav_target = 'any'
self.damage_type = 'single' #or 'area'
self.targets = 'ground'
self.space = 1
self.speed = 1
self.dps = 1
self.hp = 1
self.type = 'ground' #or 'air'
self.level = 1
self.attack_rate = 1
Clash of clans有很多部队,每个部队的属性(如hp,dps)随着等级而变化。现在我只实现了最高级别的那些属性。
为了保存特定部队的所有属性值,我声明了字典。这是 "Barbarian" 部队的属性字典。格式为 {'<troop lvl>': {'<attr>': <value>}}
barbs = {'9': {'fav_target': 'any', 'damage_type': 'single', 'targets': 'ground', 'space': 1, 'speed': 16,
'dps': 38, 'hp': 230, 'type': 'ground', 'attack_rate': 1}}
我没有手动覆盖野蛮人 class 中的每个属性,而是使用 for 循环来覆盖野蛮人 class 中的所有属性,如下所示:
class Barbarian(Troop):
def __init__(self):
super(Barbarian, self).__init__()
self.name = 'Barbarian'
for attr in barbs['9']:
self.attr = barbs['9'][attr]
问题是当我打印 Barbarian.hp 时,它 return Troop class 而不是 Barbarian class 中的值。如果我删除 super() 语句,则打印 Barbarian.hp 之类的内容会给出 AttributeError。
有没有办法在 for 循环中覆盖(或声明)class 中的属性?