class Child(SomeBaseClass):
def __init__(self):
SomeBaseClass.__init__(self)
Das ist recht einfach zu verstehen.
class Child(SomeBaseClass):
def __init__(self):
super(Child, self).__init__()
Ok, was passiert nun, wenn Sie super(Child,self)
?
Wenn eine Child-Instanz erstellt wird, ist ihre MRO (Method Resolution Order) in der Reihenfolge (Child, SomeBaseClass, object) basierend auf der Vererbung. (angenommen, SomeBaseClass hat keine anderen Eltern außer dem Standardobjekt)
Im Vorbeigehen Child, self
, super
Recherchen in der MRO des self
Instanz, und geben Sie das Proxy-Objekt neben Child zurück, in diesem Fall SomeBaseClass, dieses Objekt ruft dann die __init__
Methode von SomeBaseClass. Mit anderen Worten, wenn es sich um super(SomeBaseClass,self)
das Proxy-Objekt, das super
Die Rendite wäre object
Bei der Mehrfachvererbung kann das MRO viele Klassen enthalten, so dass grundsätzlich super
können Sie entscheiden, wo Sie die Suche in der MRO beginnen möchten.