Python 3.7.4:同时继承ABC和混凝土类



我正在模拟一个游戏,每个动作都是投掷炸弹。有1种常规炸弹和3种特殊炸弹。因此,我想创建一个类SpecialBomb,作为这3个特殊炸弹类的抽象基础。这个想法是SpecialBombBomb继承,但仍然无法实例化SpecialBomb对象。我尝试了以下方法:

class Bomb:
def __init__(self):
self.boom = True
class 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和一个具体类时,都会发生这种情况

ABCMeta实际上不会阻止您实例化一个类,除非它有一个抽象方法。可以使用抽象方法decorator将__init__封装在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()

相关内容

  • 没有找到相关文章

最新更新