【问题标题】:Abstract class, repeated inheritance, specific example抽象类,重复继承,具体例子
【发布时间】:2021-01-02 10:42:26
【问题描述】:

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

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)),但无法观察到输出的任何变化。但是,由于它是一个庞大的代码库,这可能还不够。 我的理解(上面的粗体字)正确吗?

【问题讨论】:

    标签: python-3.x abstract-class multiple-inheritance abc


    【解决方案1】:

    您的说法是正确的,因为当AbstractEsTask 继承Processor 时,它将可以访问ABC 的所有值。

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

    我想不出任何需要像您上面描述的双重继承的极端情况。即使Processor修改了ABC的方法之一,也不会影响继承,因为Processor是先继承的。

    这在python docs中有描述

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-28
      • 2021-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多