Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Python: inheritance, mro, method resolution order

Как работает множественное наследование (порядок разрешения методов)?

Проверяет знание MRO (Method Resolution Order) в Python при наследовании от нескольких классов.

Короткий ответ

Python ищет методы в порядке MRO (Method Resolution Order), который определяется алгоритмом C3. Порядок можно посмотреть через Class.__mro__. Поиск идёт слева направо и от подкласса к суперклассам, избегая повторных проверок.

Длинный ответ

Множественное наследование — когда класс наследуется от нескольких родителей. Проблема: если методы совпадают, какой вызвать? Решение — MRO.

Как определяется порядок:

  1. Используется алгоритм C3 для построения линеаризации.

  2. Порядок зависит от порядка родителей в объявлении класса.

Пример:

class A:
    	def method(self):
        	print("A")

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

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

class D(B, C):
   	pass

d = D()
d.method()  # Выведет "B" (первый родитель)
print(D.__mro__)  # (D, B, C, A, object)

Правила MRO:

  • Поиск начинается с текущего класса.

  • Далее идёт к первому родителю, затем к его родителям.

  • После переходит ко второму родителю и т.д.

  • Класс не проверяется дважды (монотонность).

Конфликты:
Если порядок не может быть разрешён (например, несовместимые иерархии), Python вызовет TypeError.

Вывод:
MRO гарантирует предсказуемый порядок поиска методов. Старайтесь избегать сложных иерархий.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    2

  • Сложность:

    6

Навыки

  • Python

    Python

Ключевые слова

#inheritance

#mro

#method resolution order

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.