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