Я пытаюсь создать игру, которая является кражей из Клана sh. Первое, что нужно сделать, это создать классы для войск и заклинаний, используемых во время фазы атаки. Я определил класс Tr oop, который является общим классом, и идея состоит в том, что все его атрибуты будут перезаписаны при объявлении указанных c войск. Вот голый костяк Tr oop класса
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
Cla sh кланов имеет много войск, и атрибуты каждого войска (например, hp, dps) меняются с уровнем. На данный момент я реализовал только эти атрибуты для максимально возможного уровня. Чтобы сохранить все значения атрибутов для указанных c войск, я объявил словари. Вот словарь атрибутов для "варвара" tr oop. Формат: {'<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}}
Вместо того чтобы вручную перезаписывать каждый атрибут внутри класса варваров, я подумал использовать для l oop, чтобы перезаписать все атрибуты внутри класса варваров, например так:
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, он возвращает значение внутри класса Tr oop вместо класса Barbarian. Если я удаляю оператор super (), то при печати чего-то вроде Barbarian.hp выдается ошибка AttributeError.
Есть ли способ перезаписать (или объявить) атрибуты внутри класса внутри для l oop?