this is also true in the presence of diamonds--disjoint method sets are dispatched as expectedeven if not implemented by each disjoint branchbecause we select the next on the mro with the method reallybecause the mro contains the same classes in these casesand because subclass always appears before its superclass in the mrothey are equivalent contexts for examplethe call in mixin to other in the following still finds it in aeven though the next class after mixin on the mro is (the call to method in works again for similar reasons)explicit diamonds work too class adef other(self)print(' other'class mixin( )def other(self)print('mixin other')super(other(class ( )def method(self)print(' method'class (mixinb)def method(self)print(' method')super(other()super(method( (method( method mixin other other method __mro__ (other mix-in orderings work too class (bmixin)def method(self)print(' method')super(other()super(method( (method( method mixin other other method __mro__ (stillthis has an effect that is no different--but may seem wildly more implicit--than direct by-name callswhich also work the same in this case regardless of superclass orderingand whether there is diamond or not in this casethe motivation for relying on mro ordering seems on shaky groundif the traditional form is both simpler and more explicitand offers more control and flexibility advanced class topics