Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何继承和强制在具有_元类_=ABCMeta的超类中定义的抽象方法_Python_Python 3.x_Abc - Fatal编程技术网

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()。