07 Июл 2023
2 мин
894

Работа функции `super()` в Python при множественном наследовании

При работе с объектно-ориентированным программированием в Python, одним из важных аспектов является понимание принципов наследования. Особенно интересным

Содержание

При работе с объектно-ориентированным программированием в Python, одним из важных аспектов является понимание принципов наследования. Особенно интересным становится вопрос, как работает функция super() при множественном наследовании.

Представим следующий код:

class FirstClass:
    def test(self):
        print("First")

class SecondClass:
    def test(self):
        print("Second")

class ThirdClass(FirstClass, SecondClass):
    def test(self):
        super().test()

Здесь, класс ThirdClass наследуется от FirstClass и SecondClass, которые оба имеют метод test(). В методе test() класса ThirdClass используется функция super(), чтобы вызвать метод test() родительского класса. Вопрос в том, какой из методов test() будет вызван?

Система наследования в Python использует алгоритм поиска, называемый линеаризацией C3. Этот алгоритм определяет порядок, в котором Python будет искать методы при использовании функции super().

Порядок определения методов следующий: сначала Python ищет метод в подклассе, затем в первом классе в списке наследования, затем во втором классе и так далее. Если метод не найден ни в одном из классов, вызывается метод из базового класса object.

В данном примере, при вызове super().test() в классе ThirdClass, будет вызван метод test() из класса FirstClass, так как он идет первым в списке наследования.

Итак, функция super() в Python позволяет вызывать методы из родительских классов в определенном порядке, определяемом алгоритмом линеаризации C3. Это обеспечивает гибкость при работе с множественным наследованием и позволяет избегать проблем с вызовом нужных методов.

Содержание

Добавить комментарий

Определи профессию по рисунку