Python 3.7.4:继承 ABC 和具体类

我正在模拟一个游戏,其中每一步都是投掷炸弹。有1种普通炸弹和3种特殊炸弹。因此,我想创建一个类SpecialBomb作为这 3 个特殊炸弹类的抽象基础。这个想法是SpecialBomb继承自Bomb,但仍然无法实例化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具体类继承时都会发生这种情况?


qq_遁去的一_1
浏览 148回答 1
1回答

三国纷争

ABCMeta 实际上并不会阻止您实例化一个类,除非它具有抽象方法。您可以__init__使用 Abstractmethod 装饰器将 SpecialBomb 包装起来,以创建您想要的行为。from abc import abstractmethod, ABCMetaclass Bomb:    def __init__(self):        self.boom = Trueclass 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()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python