#python-3.x #abstract-class #multiple-inheritance #abc
#python-3.x #абстрактный класс #множественное наследование #abc
Вопрос:
Я работаю над кодовой базой, которую я не полностью освоил (пока). У меня есть следующая структура из 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)
) и не смог заметить никаких изменений в выходных данных. Но, поскольку это большая кодовая база, этого, вероятно, недостаточно. Правильно ли я понимаю (выделено жирным шрифтом выше)?
Ответ №1:
Ваше утверждение верно, потому что при AbstractEsTask
наследовании Processor
оно будет иметь доступ ко всем значениям ABC
.
Или, другими словами, если python не может найти метод в AbstractEsTask
, он сначала будет искать в Processor, а затем ABC
. Поскольку Processor
имеет все элементы, которые ABC
есть, ABC
никогда не понадобятся. Если элемент не найден в Processor
, он не будет найден в ABC
.
Я не могу придумать ни одного крайнего случая, когда было бы необходимо двойное наследование, подобное тому, которое вы описали выше. Даже если Processor
изменяется один из методов ABC
, наследование не будет затронуто, потому что Processor
наследуется первым.
Это описано в документах Python