Необходимо ли вызывать super () .__ init __ () явно в python? - PullRequest
0 голосов
/ 01 февраля 2020

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

Я прочитал этот пост о super () и теперь задаюсь вопросом о том, действительно ли необходимо сделать что-то подобное явно:

class A(object):
 def __init__(self):
   print("world")

class B(A):
 def __init__(self):
   print("hello")
   super().__init__() #Do we get some Undefined Behavior if we do not call it explicitly?

1 Ответ

4 голосов
/ 01 февраля 2020

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

Ваша ментальная модель __init__ это неверно; это не метод конструктора, это ловушка, которую вызывает метод конструктора, чтобы вы могли легко настроить инициализацию объекта. (Фактический конструктор называется __new__, но вам не нужно это знать, и, вероятно, вам никогда не понадобится взаимодействовать с ним напрямую, не говоря уже о его изменении.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...