Python 如何继承和强制在具有_元类_=ABCMeta的超类中定义的抽象方法
有一个类(在另一个包中)定义了一个抽象方法Python 如何继承和强制在具有_元类_=ABCMeta的超类中定义的抽象方法,python,python-3.x,abc,Python,Python 3.x,Abc,有一个类(在另一个包中)定义了一个抽象方法my\u abstract\u method(),它使用了通过设置\uuuu元类=ABCMeta来定义抽象类的旧方法 我的类B是a的子类,我希望B继承a的My_abstract_method(),并要求B的所有子类实现My_abstract_method() 我该怎么做呢 例如: from abc import abstractmethod, ABC, ABCMeta class A(object): __metaclass__ = ABCM
my\u abstract\u method()
,它使用了通过设置\uuuu元类=ABCMeta来定义抽象类的旧方法
我的类B是a的子类,我希望B继承a的My_abstract_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()
非常感谢。我希望我不必像C类那样创建新的\u abstract\u method()。