Встречается на 1% собеседований по Python

Как работает механизм поиска аттрибутов при множественном наследовании

В Python используется алгоритм MRO (Method Resolution Order) на основе C3 linearization. Порядок поиска атрибутов определяется следующим образом:

  1. Сначала проверяется сам объект
  2. Затем поиск идет по цепочке классов согласно MRO
  3. При множественном наследовании порядок определяется слева направо и снизу вверх

MRO можно посмотреть через ClassName.__mro__ или ClassName.mro()

Пример:

python
class A:
    def method(self):
        return "A"

class B(A):
    def method(self):
        return "B"

class C(A):
    def method(self):
        return "C"

class D(B, C):
    pass

print(D().method())  # Выведет "B" - первый родитель в списке
print(D.__mro__)  # (<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>)

Ключевые моменты:

  • Порядок наследования важен (в примере B идет перед C)
  • Python предотвращает неоднозначности (будет ошибка если невозможно построить линейный порядок)
  • Алгоритм гарантирует, что подкласс всегда проверяется раньше родителя
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы