ExpertiDict

Python · Avançado · Português · Técnico

MRO

/ˈẽ.mi ˈɛ.xi ˈɔ/substantivo

Method Resolution Order: a ordem em que o Python procura um atributo ou método nas classes da hierarquia. É calculada pelo algoritmo C3, que respeita a ordem de herança.

Onde usar

Importa na herança múltipla e nas chamadas de super(). Para ver a ordem, use Classe.__mro__ ou Classe.mro(); se as bases forem inconsistentes, o Python recusa a classe com TypeError.

Em código

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

print([k.__name__ for k in D.__mro__])

Exemplos

Confira a MRO para ver qual método será chamado.

O erro aparece porque a MRO é inconsistente com a ordem das bases.

Cuidado

O super() não chama necessariamente a classe pai direta; ele segue a próxima classe na MRO da instância.

Sinônimos

ordem de resolução de métodos

Origem

Sigla do inglês Method Resolution Order.

Veja também

Todos os termos de Python