Herança de classes em orientação a objetos necessita de alguns cuidados por parte dos programadores, pois pode gerar ambiguidade quando uma classe herda métodos e atributos de mais de uma classe. Python resolve essa ambiguidade aplicando o algoritmo “MRO” (“Method Resolution Order” – Ordem de Resolução de Método, em tradução livre). A chamada do método “my-func” através da instância “d” da classe “D”, utilizando o algoritmo MRO, resultará no acesso desse método (nas diversas classes) na seguinte ordem:
class A(object):
def my_func(self):
print("Calling this from A")
class B(A):
pass
class C(A):
def my_func(self):
print("Calling this from C")
class D(B, C):
pass
d = D()
d.my_func()
Class D → Class B → Class C, imprimindo “Calling this from C” no terminal.
Class D → Class B → Class A, imprimindo “Calling this from A” no terminal.
Class D → Class C, imprimindo “Calling this from C” no terminal.
Class B → Class A, imprimindo “Calling this from A” no terminal.
Class A, imprimindo “Calling this from A” no terminal.