In the book "Python in a Nutshell" (2nd Edition) there is an example which uses
old style classes to demonstrate how methods are resolved in classic resolution order and
how is it different with the new order.
I tried the same example by rewriting the example in new style but the result is
no different than what was obtained with old style classes. The python version
I am using to run the example is 2.5.2. Below is the example:
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__
The call "instance.amethod()" prints "Base1", but as per my understanding of the MRO
with new style of classes the output should have been "Base3". The
call "Derived.mro" prints:
(<class '__main__.Derived'>, <class '__main__.Base2'>, <class '__main__.Base1'>, <class '__main__.Base3'>, <type 'object'>)
I am not sure if my understanding of MRO with new style classes is incorrect or
that I am doing a silly mistake which I am not able to detect. Please help me
in better understanding of MRO.