Wenn der Konstruktor der Elternklasse in einer Unterklasse benötigt wird, müssen Sie explizit den Konstruktor der Elternklasse aufrufen, oder den Konstruktor der Elternklasse nicht überschreiben.

Unterklasse überschreibt__init__nicht, beim Instanziieren einer Unterklasse wird automatisch das in der Elternklasse definierte__init__ aufgerufen。

Beispiel

class Father(object): def __init__(self, name): self.name=name print ( "name: %s" %( self.name) ) def getName(self): return 'Father ' + self.name class Son(Father): def getName(self): return 'Son '+self.name if __name__=='__main__': son=Son('example') print ( son.getName() )

Das Ausgabeergebnis ist:

name: example
Son example

Wenn Sie__init__überschreiben, wird beim Instanziieren der Unterklasse die bereits definierte__init__der Elternklasse nicht aufgerufen; die Syntaxform ist wie folgt:

Beispiel

class Father(object): def __init__(self, name): self.name=name print ( "name: %s" %( self.name) ) def getName(self): return 'Father ' + self.name class Son(Father): def __init__(self, name): print ( "hi" ) self.name = name def getName(self): return 'Son '+self.name if __name__=='__main__': son=Son('example') print ( son.getName() )

Das Ausgabeergebnis ist:

hi
Son example

Wenn du__init__überschreibst, kannst du, um den Konstruktor der Elternklasse zu erben, dassuperSchlüsselwort verwenden:

super(子类,self).__init__(参数1,参数2,....)

Es gibt auch eine klassische Schreibweise dafür:

父类名称.__init__(self,参数1,参数2,...)

Beispiel

class Father(object): def __init__(self, name): self.name=name print ( "name: %s" %( self.name)) def getName(self): return 'Father ' + self.name class Son(Father): def __init__(self, name): super(Son, self).__init__(name) print ("hi") self.name = name def getName(self): return 'Son '+self.name if __name__=='__main__': son=Son('example') print ( son.getName() )

Das Ausgabeergebnis ist:

name: example
hi
Son example