【发布时间】:2019-10-14 19:06:58
【问题描述】:
我想对英雄施加狂暴效果。 抽象类: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}
我的错误是什么?
【问题讨论】:
-
很难知道你真正想要什么,但效果是两个
Berserk包装器都只是引用了原始Hero的stats属性。每个Berserk都会增加相同的"HP"条目,因此您应该会发现所有三个实例都具有:stats["HP"] == 142。
标签: python oop abstract-class decorator