我正在模拟一个游戏,其中每一步都是投掷炸弹。有1种普通炸弹和3种特殊炸弹。因此,我想创建一个类SpecialBomb作为这 3 个特殊炸弹类的抽象基础。这个想法是SpecialBomb继承自Bomb,但仍然无法实例化SpecialBomb对象。我尝试了以下方法:class Bomb: def __init__(self): self.boom = Trueclass SpecialBomb(Bomb, ABC): def __init__(self): super().__init__()class CrossBomb(SpecialBomb): def __init__(self): super().__init__()c = CrossBomb()print(c.boom)s = SpecialBomb()该boom属性已正确继承c,但程序没有因我实例化而引发错误SpecialBomb。当我继承时,是否缺少一些东西ABC,或者每次类从ABC具体类继承时都会发生这种情况?
1 回答
三国纷争
TA贡献1804条经验 获得超7个赞
ABCMeta 实际上并不会阻止您实例化一个类,除非它具有抽象方法。您可以__init__使用 Abstractmethod 装饰器将 SpecialBomb 包装起来,以创建您想要的行为。
from abc import abstractmethod, ABCMeta
class Bomb:
def __init__(self):
self.boom = True
class SpecialBomb(Bomb, metaclass=ABCMeta):
@abstractmethod
def __init__(self):
super().__init__()
class CrossBomb(SpecialBomb):
def __init__(self):
super().__init__()
c = CrossBomb()
print(c.boom)
s = SpecialBomb()
添加回答
举报
0/150
提交
取消