@snafu: was Du mit Deinem Beispiel beschreibst, passiert dann, wenn Du
statt
definierst. Dies ist eine der Tücken der Linearisierung bei Mehrfachvererbung.
Mixins sollten bei Mehrfachvererbung immer zuerst angegeben werden und die Klasse, von der eigentlich abgeleitet wird, zuletzt. Idealerweise werden bei Mehrfachvererbung nur Mixins genutzt, die zusätzliche Methoden bereitstellen, oder, falls eine Überladung passiert, die gleiche oder eine erweiterte Signatur bieten. Mixins sollten auch keine __init__ Methode haben. Dann wird die *args/**kwargs Situation einfacher. Mehrfachvererbung ohne Mixins ist schwieriger zu entwerfen.
Ohne Mehrfachvererbung ist super() (scheinbar) leicht zu verstehen, praktisch und funktioniert auch dann richtig, wenn es falsch angewandt wird (falsch in dem Sinne, dass es auch bei Mehrfachvererbung korrekt funktionieren soll).
Mit Mehrfachvererbung dagegen schaut es anders aus: hier muss die MRO verstanden werden und die Konsequenzen daraus.