抽象类,重复继承,具体示例

问题描述

我正在开发一个尚未完全掌握的代码库。我有以下3类结构:

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

中有描述