在python中的for循环内声明类属性

问题描述 投票:0回答:1

[我正在尝试创建一款《部落冲突》的翻版游戏。只是将其作为隔离项目进行娱乐即可。因此,要做的第一件事就是为进攻阶段使用的部队和法术创建类。我已经定义了一个部队Troop,它是一个通用类,其思想是宣布特定部队时其所有属性都将被覆盖。这是准系统部队班级

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

氏族冲突有许多部队,每支部队的属性(例如hp,dps)随级别而变化。目前,我仅将这些属性实现为可能的最高级别。为了保存特定部队的所有属性值,我宣布了字典。这是“野蛮人”部队的属性字典。格式为{'<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}}

不是手动覆盖野蛮类内部的每个属性,而是考虑使用for循环来覆盖野蛮类内部的所有属性,如下所示:

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时,它在Troop类而不是Barbarian类中返回值。如果删除了super()语句,则打印类似Barbarian.hp的内容将给出AttributeError。

是否有一种方法可以覆盖(或声明)for循环内的类中的属性?

python class attributes attributeerror declare
1个回答
0
投票

添加**kwargs参数;在**kwargs中使用setattr;将字典传递给实例。

__init__
© www.soinside.com 2019 - 2024. All rights reserved.