Si le constructeur de la classe parente est nécessaire dans une sous-classe, vous devez explicitement appeler le constructeur de la classe parente, ou ne pas redéfinir le constructeur de la classe parente.
La sous-classe ne redéfinit pas__init__, lors de l'instanciation d'une sous-classe, elle appellera automatiquement le__init__ défini dans la classe parente。
Exemple
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() )
Le résultat de sortie est:
name: example
Son example
Si vous redéfinissez__init__, lors de l'instanciation de la sous-classe, celle-ci n'appellera pas le__init__déjà défini de la classe parente, le format syntaxique est le suivant :
Exemple
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() )
Le résultat de sortie est:
hi
Son example
Si vous redéfinissez__init__, pour hériter du constructeur de la classe parente, vous pouvez utilisersupercomme mot-clé :
super(子类,self).__init__(参数1,参数2,....)
Il existe aussi une façon classique de l'écrire :
父类名称.__init__(self,参数1,参数2,...)
Exemple
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() )
Le résultat de sortie est:
name: example
hi
Son example