class (bc)pass ( __init__ __init__ class (bc)def __init__(self) __init__(selfc __init__(selfx ( __init__ __init__ __init__ __init__ still runs leftmost only traditional form invoke both supers by name but this now invokes twiceby contrastif all classes use superor are appropriately coerced by proxies to behave as if they dothe method calls are dispatched according to class order in the mrosuch that the top-level class' method is run just onceclass adef __init__(self)print(' __init__'class ( )def __init__(self)print(' __init__')super(__init__(class ( )def __init__(self)print(' __init__')super(__init__( ( __init__ __init__ ( __init__ __init__ class (bc)pass ( __init__ __init__ __init__ runs __init__a is next super in self' mro runs __init__c is next super in self' mrothe real magic behind this is the linear mro list constructed for the class of self-because each class appears just once on this listand because super dispatches to the next class on this listit ensures an orderly invocation chain that visits each class just once cruciallythe next class following in the mro differs depending on the class of self--it' for instancebut for instanceaccounting for the order of constructors runb __mro__ ( __mro__ ( advanced class topics