我只能装饰单个实例的属性获取器吗?

时间:2019-01-13 06:19:06

标签: python

我想给一个dude一个物品,该物品会改变其攻击方式。我想以某种方式包装dmg函数并修改单个Dude实例的返回值。

我意识到如果装饰AttackComponent.dmg.fget,它将影响所有实例;当我只希望它影响使用该物品的物品。

bonus_dmg经常从buff / items / etc更改。

class Dude:
    def __init__(self):
        self.attack = AttackComponent(self)
        self.base_dmg = 9000
        self.bonus_dmg = [9, 90, 900] 
    @property
    def total_dmg(self):
        return self.base_dmg + sum(self.bonus_dmg)

class AttackComponent:
    def __init__(self, dude):
        self.dude = dude
    @property
    def dmg(self):
        return {'physical dmg': self.dude.total_dmg}

dude1 = Dude()
dude2 = Dude()
dude3 = Dude()

我想给dude1一个可以修改dude1.attack.dmg返回值的项目。
例如,它将百分比dmg转换为魔术dmg,例如:

print(dude1.attack.dmg)    # {'physical dmg': 7777, 'magic dmg': 2222}
print(dude2.attack.dmg)    # {'physical dmg': 9999}
print(dude3.attack.dmg)    # {'physical dmg': 9999}

0 个答案:

没有答案