Если в подклассе нужен конструктор родительского класса, необходимо явно вызвать конструктор родительского класса или не переопределять конструктор родительского класса.

Подкласс не переопределяет__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