我想给一个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}