问题描述
有一个类A(在另一个包中),该类使用通过设置my_abstract_method()
来定义抽象类的旧方法来定义抽象方法__Metaclass__ = ABCMeta
。
我的类B是A的子类,我希望B继承A的my_abstact_method()
,并要求B的所有子类实现my_abstract_method()
我将如何去做?
示例:
from abc import abstractmethod,ABC,ABCMeta
class A(object):
__Metaclass__ = ABCMeta
@abstractmethod
def my_abstract_method(self):
return
class B(A,Metaclass=ABCMeta):
pass
B()
执行后,将成功创建B()。
由于未定义A的抽象方法,如何使B()失败?
解决方法
编辑: 除了显而易见的问题之外,很难理解这里的问题是什么—以下解决方案可能或可能与实际实现相关。
下面的解决方案引入了另一层抽象,打破了“继承的解决方案不是更多的继承”的原则,但这可能是一种特殊情况,可能对您的场景有用。
from abc import abstractmethod,ABC,ABCMeta
class A(object):
__metaclass__ = ABCMeta
@abstractmethod
def my_abstract_method(self):
return
class C(A,ABC):
@abstractmethod
def new_abstract_method(self):
pass
class B(C):
pass
B()