问题描述
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
首先被继承了。