为了账号安全,请及时绑定邮箱和手机立即绑定

Python 3.7.4:继承 ABC 和具体类

Python 3.7.4:继承 ABC 和具体类

qq_遁去的一_1 2023-06-27 16:44:04
我正在模拟一个游戏,其中每一步都是投掷炸弹。有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()


查看完整回答
反对 回复 2023-06-27
  • 1 回答
  • 0 关注
  • 143 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信