如何解决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
和具体类都发生这种情况?
解决方法
ABCMeta实际上不会阻止您实例化一个类,除非它具有抽象方法。您可以使用抽象方法装饰器将__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()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。