摘要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
先被继承
中有描述
我正在开发一个我还没有完全掌握的代码库。我有以下 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
先被继承