Thanks Chris and Dieter. I think I got it. It seems it follows the __mro__ of 
the caller class, not the current class __mro_. 

if __name__ == '__main__':
    print('MRO of SortedIntList {}'.format(SortedIntList.__mro__))
    print('MRO of IntList {}'.format(IntList.__mro__))

# MRO of SortedIntList (<class '__main__.SortedIntList'>, <class 
'__main__.IntList'>, <class '__main__.SortedList'>, <class 
'__main__.SimpleList'>, <class 'object'>)
# MRO of IntList (<class '__main__.IntList'>, <class '__main__.SimpleList'>, 
<class 'object’>)

I thought obj.add(0) goes to the IntList by following its factory class 
__mro__, and then it follows the __mro__ of the current class(IntList) which is 
SimpleList .

Thanks again.


Thanks,

Arup Rakshit
a...@zeit.io



> On 30-Mar-2019, at 7:02 AM, Chris Angelico <ros...@gmail.com> wrote:
> 
> On Fri, Mar 29, 2019 at 11:54 PM Arup Rakshit <a...@zeit.io> wrote:
>> 
>> Now when I call the add method on the SortedIntList class’s instance, I was 
>> expecting super.add() call inside the IntList class add method will dispatch 
>> it to the base class SimpleList. But in reality it doesn’t, it rather 
>> forwards it to the SortedList add method. How MRO guides here can anyone 
>> explain please?
>> 
> 
> When you call super, you're saying "go to the next in the MRO". You
> can examine the MRO by looking at SortedIntList.__mro__ - that should
> show you the exact order that methods will be called.
> 
> ChrisA
> -- 
> https://mail.python.org/mailman/listinfo/python-list

-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to