Задать вопрос
  • Почему порядок вызова методов в суперклассах именно такой?

    @Zveridze
    Не совсем так.
    В современных версиях применяется алгоритмы линеаризации S3.

    Почему так:
    Алгоритм поиска слева направо в глубину применялся только в старых версиях Питона. С версии 2.3 в Питоне появился базовый класс object, от которого было рекомендовалось наследовать все пользовательские классы. А с версии 3 старые классы отменили, теперь все классы исходят по дефолту из object. Это привело к проблеме ромбовидного наследования.
    Ромбовидное наследование - ситуация в которой предки (LeftClass, RightClass) класса (SubClass) наследуются от общего класса (BaseClass).

    Как в Питоне решается данная проблема:
    Для каждого класса строится модель линеаризации основываясь на алгоритме S3. Результат работы алгоритмы можно посмотреть при помощи вызова Class.__mro___.
    То есть, на основании результата работы данного алгоритмы, у вас сначала метод будет искаться в LeftClass, потом в RightClas, потом в BaseClass.

    Вот, например, отличная статья где очень подробно рассмотрен данный алгоритм https://habr.com/ru/post/62203/
    Ответ написан
    Комментировать