我想对英雄施加狂暴效果。 抽象类:AbstractEffect和AbstractPositive(类继承人),可以接受基参数。接下来,还将创建AbstractNegative。我不确定继承方案是否正确(Hero--->;AbstractEffect)。你知道吗
from abc import ABC, abstractmethod
class Hero:
def __init__(self):
self.stats = {"HP": 128}
def get_stats(self):
return self.stats.copy()
class AbstractEffect(ABC):
def __init__(self, base):
self.base = base
@abstractmethod
def get_stats(self):
return self.base.stats()
class AbstractPositive(AbstractEffect):
def __init__(self, base):
self.base = base
@abstractmethod
def get_stats(self):
return self.base.stats()
class Berserk(AbstractPositive):
def __init__(self, base):
self.base = base
self.stats= self.base.stats
self.stats["HP"] += 7
def get_stats(self):
return self.stats
hero = Hero()
brs1 = Berserk(hero)
print('brs1', brs1.get_stats())
brs2 = Berserk(brs1)
print('brs2', brs2.get_stats())
print('brs1', brs1.get_stats())
我想接收
brs1 {'HP': 135}
brs2 {'HP': 142}
brs1 {'HP': 135}
但我明白了
brs1 {'HP': 135}
brs2 {'HP': 142}
brs1 {'HP': 142}
我犯了什么错?你知道吗
因为以下代码
{“HP”:128}是一个容器
而且
因此,
当您使用狂暴(heroxx)来增强英雄时,
self.stats["HP"] += 7
实际上是在修改原始数据。所以你需要把它改成self.stats = self.base.get_stats()
,然后你就可以得到你想要的。可以使用以下代码进行测试。你知道吗你被路过的人残忍地袭击了。你知道吗
在代码中,有
self.stats = self.base.stats
。这不能复制。因此,self.stats
对于brs1
和brs2
指的是相同的dict
。当您实例化brs2
时,您会对其进行更改,并且该更改会反映在brs1
中。你知道吗self.stats = self.base.stats.copy()
将是一个好的开始,如果你不想这样的事情发生的话。你知道吗也就是说,我觉得很奇怪,你想以这种方式编码状态效果…如果是我,我会让每个状态效果只包含一个修饰符,这将由character类依次处理解决这些修饰符。你知道吗
相关问题 更多 >
编程相关推荐