如何解决如何继承并强制使用__metaclass__ = ABCMeta在超类中定义的抽象方法
有一个类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()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。