Wie funktioniert Python ' s super() Arbeit mit Mehrfachvererbung?

Ich bin ziemlich neu in Python objektorientiert Programmieren und ich habe Mühe,
das Verständnis der super() Funktion (new-style-Klassen), insbesondere wenn es um Mehrfachvererbung.

Wenn Sie zum Beispiel etwas wie:

class First(object):
    def __init__(self):
        print "first"

class Second(object):
    def __init__(self):
        print "second"

class Third(First, Second):
    def __init__(self):
        super(Third, self).__init__()
        print "that's it"

Was ich nicht verstehe ist: wird die Third() Klasse Erben, die beiden Konstruktor-Methoden? Wenn ja, dann welches ausgeführt wird mit super() und warum?

Und was ist, wenn Sie ausführen möchten, die anderen? Ich weiß, es hat etwas zu tun mit Python-Methode Auflösung um (MRO).

In der Tat, die mehrfache Vererbung ist der einzige Fall, wo super() ist. Ich würde nicht empfehlen es mit Klassen mit linearen Vererbung, wo es nur nutzlosen overhead.
ist technisch korrekt, es ist ein kleiner Aufwand, aber super() ist mehr pythonic und ermöglicht re-factoring und änderungen an der code im Laufe der Zeit. Die Verwendung von super (), es sei denn, Sie wirklich brauchen, eine benannte Klasse Methode.
Ein weiteres problem mit super() ist, dass es zwingt jeder Unterklasse, es auch zu benutzen, während, wenn Sie nicht mit super() jeder Unterklassen kann es selbst entscheiden. Wenn ein Entwickler es nicht kennen super() oder nicht weiß, es wurde verwendet, Probleme mit der Instandhaltung auftreten können, sind sehr schwer aufzuspüren.

InformationsquelleAutor Callisto | 2010-07-18

Schreibe einen Kommentar