首页 > 解决方案 > 我可以只为单个实例装饰属性获取器吗?

问题描述

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

我意识到如果我 decorate AttackComponent.dmg.fget,它将影响所有实例;当我只希望它影响使用该项目的人时。

bonus_dmg经常从 buffs/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}

标签: python

解决方案


推荐阅读