Python 3.x 抽象类,重复继承,具体示例

Python 3.x 抽象类,重复继承,具体示例,python-3.x,abstract-class,multiple-inheritance,abc,Python 3.x,Abstract Class,Multiple Inheritance,Abc,我正在开发一个我还没有完全掌握的代码库。我有以下三级结构: class Processor(ABC): @abstractmethod def process(self, *args: Any, **kwargs: Any): pass class AbstractEsTask(Processor, ABC): def calculate(self, param): ... @DplTask class EsDirectTask(

我正在开发一个我还没有完全掌握的代码库。我有以下三级结构:

class Processor(ABC):
    @abstractmethod
    def process(self, *args: Any, **kwargs: Any):
        pass


class AbstractEsTask(Processor, ABC):
    def calculate(self, param):
         ...


@DplTask
class EsDirectTask(AbstractEsTask):
    def process(self):
        return self.calculate(param = "DIRECT")
在我看来,从
ABC
继承
AbstractEsTask
是多余的,因为
Processor
已经这样做了。

我已尝试相应地编辑代码(
class AbstractEsTask(Processor,ABC)
->
class AbstractEsTask(Processor)
),但无法观察到输出中的任何更改。但是,由于它是一个庞大的代码库,这可能还不够。
我的理解(上面用粗体表示)正确吗?

您的陈述是正确的,因为当
AbstractEsTask
继承
Processor
时,它将访问
ABC
的所有值

或者换句话说,如果python在
AbstractEsTask
中找不到方法,它将首先查找处理器,然后查找
ABC
。因为
Processor
拥有
ABC
拥有的所有元素,所以永远不需要
ABC
。如果在
处理器
中找不到成员,则在
ABC
中将找不到该成员

我想不出有任何一种情况需要像你上面描述的那样的双重继承。即使
Processor
修改了
ABC
的其中一种方法,继承也不会受到影响,因为
Processor
首先被继承

这一点在本节中进行了描述