Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Python: mro, mro2, mro3

В чем разница между MRO2 и MRO3?

Вопрос проверяет понимание изменения алгоритма поиска метода (MRO) между Python 2 и Python 3.

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

MRO (Method Resolution Order) — это порядок, в котором Python ищет методы или атрибуты в случае наследования от нескольких классов.

  • В Python 2 используется C3-линеаризация, но порядок базовых классов иногда определяется иначе, что может приводить к непредсказуемым результатам.

  • В Python 3 алгоритм MRO был улучшен, что сделало поиск более стабильным и предсказуемым, строго следуя C3-линеаризации.

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

MRO (порядок разрешения методов) определяет, как Python ищет атрибуты и методы в иерархии классов при наследовании.

Python 2 (MRO2)

  • Используется C3-линеаризация, но алгоритм может быть неконсистентным в некоторых случаях.

  • Если указать несовместимый порядок базовых классов, это не всегда вызывает ошибку, что иногда приводит к неправильному MRO.

Python 3 (MRO3)

  • Алгоритм MRO был доработан, чтобы более строго следовать правилам C3-линеаризации.

  • Теперь несовместимые классы в цепочке наследования вызывают явную ошибку (TypeError).

Пример:

class A: pass
class B(A): pass
class C(A, B): pass  # В Python 3 вызовет ошибку, так как нарушается C3-линеаризация

Как проверить MRO:

class A: pass
class B: pass
class C(A, B): pass

print(C.mro())  # Вывод MRO для Python 3

Ключевое отличие

Python 3 делает MRO более строгим и безопасным, предотвращая проблемы, которые могли возникать в Python 2.

  • Аватар

    Python Guru

    Sergey Filichkin

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

Уровень

  • Рейтинг:

    2

  • Сложность:

    9

Навыки

  • Python

    Python

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

#mro

#mro2

#mro3

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

  • Аватар

    Python Guru

    Sergey Filichkin

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