I had posted this on StackOverflow - it's an excellent example of why SO sucks (don't want that happening here so please read carefully):
http://stackoverflow.com/questions/38145818/super-and-mix-in-class-how-exactly-is-the-search-order-altered?noredirect=1#comment63722336_38145818 I'm reading this article: https://rhettinger.wordpress.com/2011/05/26/super-considered-super/ He's trying to explain the purpose of a 'mix-in class' and he says We did not alter the source code for LoggingDict. Instead we built a subclass whose only logic is to compose two existing classes and control their search order. class LoggingOD(LoggingDict, collections.OrderedDict): pass My question is this: in the above article context, is he talking about the LoggingDict's search order that is being manipulated? Or he is talking about manipulating the LoggingOD search order? He says very clearly "not alter the source code for LoggingDict" so clearly he means that somehow, magically - the search order for super().__setitem__ in class LoggingDict(dict): def __setitem__(self, key, value): logging.info('Settingto %r' % (key, value)) super().__setitem__(key, value) is being altered/influenced, but how? Could someone clarify what exactly is going on here? Far as I can make of it, the tree looks like this: http://i.stack.imgur.com/3foOB.jpg Here's the code: import collections class LoggingDict(dict): def __setitem__(self, key, value): logging.info('Settingto %r' % (key, value)) super().__setitem__(key, value) class LoggingOD(LoggingDict, collections.OrderedDict): pass x = LoggingDict() print LoggingDict.__mro__ print LoggingOD.__mro__ as you can see.. selfstudy@deathstar:~$ python 29.mro.py (<class '__main__.LoggingDict'>, <type 'dict'>, <type 'object'>) (<class '__main__.LoggingOD'>, <class '__main__.LoggingDict'>, <class 'collections.OrderedDict'>, <type 'dict'>, <type 'object'>) selfstudy@deathstar:~$ -- https://mail.python.org/mailman/listinfo/python-list