Кажется, это просто артефакт, когда вы печатаете в __init__
. Ваш текущий код печатает после , он вызывает super().__init__
, и поэтому иерархия наследования печатается в обратном порядке. Если вы печатаете перед супер вызовом, он будет в том же порядке, что и MRO. Возможно, было бы проще понять, если бы вы печатали в обоих направлениях:
class First(object):
def __init__(self):
print("first (top)")
super().__init__()
print("first (bottom)")
class Second(object):
def __init__(self):
print("second (top)")
super().__init__()
print("second (bottom)")
class Third(First, Second):
def __init__(self):
print("third (top)")
super().__init__()
print("third (bottom)")
Теперь вывод Third()
должен быть:
third (top)
first (top)
second (top)
second (bottom)
first (bottom)
third (bottom)
Вывод, который вы видите, это <__main__.Third ...>
печатается не вашим кодом, а интерактивной оболочкой. Это результат вызова Third
, экземпляра класса. Если бы вы сделали instance = Third()
, вы бы этого не увидели, так как значение будет сохранено в переменной, а не распечатано. REPL (чтение Eval Print L oop) выполняется только тогда, когда Python запускается в интерактивном режиме, он не будет выполнять дополнительную печать в модулях, которые вы импортируете или запускаете как скрипт.