No livro Python in a Nutshell (2nd Edition) há um exemplo que usa
classes de estilo antigo para demonstrar como os métodos são resolvidos na ordem de resolução clássica e
como é diferente com a nova ordem.
Eu tentei o mesmo exemplo reescrevendo o exemplo em um novo estilo, mas o resultado não é diferente do que foi obtido com as classes de estilo antigo. A versão python que estou usando para executar o exemplo é 2.5.2. Abaixo está o exemplo:
class Base1(object): def amethod(self): print "Base1" class Base2(Base1): passe a classe Base3(objeto): def amethod(self): print "Base3" class Derived(Base2,Base3): passe instância = Derived() instance.amethod() print Derived.__mro__
A chamada instance.amethod()
imprime Base1
, mas de acordo com meu entendimento do MRO com novo estilo de classes a saída deveria ser Base3
. A chamada Derived.__mro__
imprime:
(<class "__main__.Derived">, <class "__main__.Base2">, <class "__main__.Base1">, <class "__main__.Base3">, <type "object">)
Não tenho certeza se minha compreensão de MRO com novos style classes está incorreta ou que estou cometendo um erro bobo que não consigo detectar. Ajude-me a entender melhor o MRO.