摘要class,重复继承,具体例子

Abstract class, repeated inheritance, specific example

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

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")

在我看来,AbstractEsTask 继承自 ABC 是多余的,因为 Processor 已经这样做了。

我已尝试相应地编辑代码 (class AbstractEsTask(Processor, ABC) -> class AbstractEsTask(Processor)),但无法观察到输出有任何变化。但是,由于它是一个大型代码库,这可能还不够。 我的理解(上面的粗体部分)是否正确?

您的陈述是正确的,因为当 AbstractEsTask 继承 Processor 时,它将可以访问 ABC.

的所有值

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

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

这在python docs

中有描述