Python:如何创建适用于类中变量的效果?

时间:2016-09-22 17:49:19

标签: python class methods

我正在制作一个基于文本的角色扮演游戏,我正在尝试创建影响基础攻击,转弯等等统计数据的魔法法术。我正在使用各种类型的法术格式:

class BuffSpell(object):
    def __init__(self, **kwargs):
        self.__dict__.update(kwargs)

我正在从字典中调用法术

bardSpells = {
    1: BuffSpell(name= "Flare", level= 0, stat= baseAttack, value -1)
}

我如何在像妖精这样的敌人身上使用耀斑?我尝试制作方法

def useBuffSpell(target, spell):
    target.spell.stat = target.spell.stat + spell.value

使用goblinBuffSpell[1]的参数。

此外,通过法术影响战斗序列中下一回合动作的好方法是什么?

1 个答案:

答案 0 :(得分:0)

使用getattrsetattr,并使法术中的属性引用成为str

bardSpells = {
    1: BuffSpell(name= "Flare", level= 0, stat="baseAttack", value -1)
}

def useBuffSpell(target, spell):
    setattr(target, spell.stat,
            getattr(target, spell.stat, 0) + spell.value)

setattr是一个内置函数,给定一个对象,一个属性的名称和一个值,将该对象的属性设置为该值。 getattr是一个内置函数,给定一个对象,一个属性的名称,以及可选的默认值(在上例中为0),返回该对象的属性,如果该对象具有默认值,则返回默认值没有该名称的属性。如果没有给出默认值,则不存在的属性访问会引发AttributeError

上述示例(如果您执行useBuffSpell(goblin, bardSpells[1]))会将goblin s baseAttack减少1,或者如果它没有-1则将其设置为baseAttack 1}}。