Если в подклассе нужен конструктор родительского класса, необходимо явно вызвать конструктор родительского класса или не переопределять конструктор родительского класса.
Подкласс не переопределяет__init__, при создании экземпляра подкласса он автоматически вызовет определённый в родительском классе__init__。
Пример
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() )
Результат вывода:
name: example Son example
Если вы переопределяете__init__, при создании экземпляра подкласса он не вызовет уже определённый в родительском классе__init__, формат синтаксиса следующий:
Пример
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() )
Результат вывода:
hi Son example
Если вы переопределяете__init__, чтобы унаследовать конструктор родительского класса, можно использоватьsuperключевое слово:
super(子类,self).__init__(参数1,参数2,....)
Существует также классический способ написания:
父类名称.__init__(self,参数1,参数2,...)
Пример
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() )
Результат вывода:
name: example hi Son example