No livro Python in a Nutshell (2ª edição), 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.
Tentei o mesmo exemplo reescrevendo o exemplo no novo estilo, mas o resultado não é diferente do que foi obtido com as classes do 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):
pass
class Base3(object):
def amethod(self): print "Base3"
class Derived(Base2,Base3):
pass
instance = Derived()
instance.amethod()
print Derived.__mro__
A chamada é instance.amethod()
impressa Base1
, mas de acordo com meu entendimento do MRO com novo estilo de classes, a saída deveria ter sido Base3
. A chamada é Derived.__mro__
impressa:
(<class '__main__.Derived'>, <class '__main__.Base2'>, <class '__main__.Base1'>, <class '__main__.Base3'>, <type 'object'>)
Não tenho certeza se meu entendimento de MRO com novas classes de estilo está incorreto ou se estou cometendo um erro bobo que não sou capaz de detectar. Por favor, me ajude a entender melhor o MRO.