MRO - Это порядок разрешения методов и о нем обычно говорят, когда речь заходит о множественном наследовании (кстати, если с ним не знакомы, настоятельно рекомендую немного покопаться в теме). Он определяет последовательность, по которой Python ищет методы и атрибуты в классе и его родителях. Чтобы чуть глубже понять, предлагаю рассмотреть принцип его работы на конкретном примере. Допустим, у нас есть некий класс D, который наследуется от классов B и C, которые наследуются от класса A, который ... :) пожалуй, остановимся на этом. У этих классов определены методы who_am_i, которые просто печатают имя класса, которому они принадлежат. Классу D мы не будем создавать этот метод, а сделаем из него просто класс-заглушку: Теперь создадим экземпляр класса D и попробуем вызвать у него метод who_am_i: d = D()
d.who_am_i() Что произойдет? А вот что. В выводе мы увидим: >>> B Почему именно B, нам может рассказать MRO. Для удобства можно просто вызвать метод mro() или атрибут __mro__: print(D.mro()