[Tutor] class questions

Hugo Arts hugo.yoshi at gmail.com
Sun Jun 27 21:30:46 CEST 2010

On Sun, Jun 27, 2010 at 6:47 PM, Shashwat Anand
<anand.shashwat at gmail.com> wrote:
> <snip>
>> The problem of the MRO isn't that it doesn't work, it's that it causes
>> behavior that is unintuitive. In my example, We would expect D.x to be
>> equal to C.x (since D inherits from C, and C overrides the x method).
>> However, this is not the case. This is what the problem is with the
>> old MRO system, not so much that it doesn't work at all, but the
>> results aren't consistent with what you'd expect from multiple
>> inheritance.
> I tried your example in python2.6
>>>> class A:
> ...    def x(self): return "in A"
> ...
>>>> class B(A): pass
> ...
>>>> class C(A):
> ...    def x(self): return "in C"
> ...
>>>> class D(B, C): pass
> ...
>>>> o = D()
>>>> o.x()
> 'in A'
> If MRO was in python2.3, the output of o.x() should be 'in C'. It works fine
> on 3.2alpha though.

You forgot that the example as is still uses the old MRO, even in 2.3.
This is because these classes are still classic-style classes. To use
the new MRO you will have to use new-style classes (A must inherit
from object). In 3.x it will of course work fine, since everything
without explicit inheritance inherits from object.


More information about the Tutor mailing list