繁体   English   中英

每次当另一个变量发生变化时,如何更改 class 中的一个变量? Python

[英]How can I change one variable in class every time when another changes? Python

这是我的代码,我希望每次级别更改时都会更改损坏

class Item:
    __ids = count(0)

    def __init__(self):
        self.name = 'Nothing'
        self.id = next(self.__ids)
        self.level = 1


class Weapon(Item):
    def __init__(self):
        super().__init__()
        self.damage = 1

    def setDamage(self):
        self.damage = (self.level * 2.25, self.level * 2.25 + self.level // (self.level / 2))

    @property
    def damage(self):
        return self.damage

    @damage.setter
    def damage(self):
        self.setDamage()

代码的不正确如果不干扰问题就忽略,我是python的新手

似乎根本没有理由设定武器的伤害; 完全是武器级别的function。

 #  Irrelevant code removed
 class Item:    
    def __init__(self):
        self.level = 1

class Weapon(Item):    
    @property
    def damage(self):
        base = self.level * 2.25
        return (base, base + self.level // (self.level / 2))

像这样的东西可以做你想做的事。 我不确定你希望伤害如何随着水平的增加而变化。 无论级别是多少,我都将其设置为始终为 2.25 倍。

class Weapon(Item):
    def __init__(self):
        super().__init__()

    @property
    def damage(self):
        return self.level * 2.25

我认为 levelUp() function 可能比从外部更改级别更好。

def levelUp():

    self.level+=1
    self.setDamage()
    #any other level up stuff like a shinier picture 

目前要升级某些东西,你必须找到它的当前等级,这很烦人,并找到一些方法来在等级改变时自动更新伤害,这将是这个任务的一个不明显的副作用。

sword.level = sword.level + 1

使用levelUp function 你可以做到

sword.levelUp()

根本无需检查其当前的 state。 这还允许您为每种物品类型处理不同的升级(如果其他武器的伤害和等级之间没有简单的数学关系,或者您想将其限制在某个上限等)

你总是可以安全地做

for item in items:
    item.levelup()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM