是否有必要在 python 中显式调用 super().__init__() ?

Som*_*ame 2 python inheritance constructor class python-3.x

我来自 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?
Run Code Online (Sandbox Code Playgroud)

tri*_*eee 7

如果你覆盖__init__超类的__init__方法,那么子类的方法需要显式调用它,如果这是预期的行为,是的。

你的心智模型__init__不正确;它不是构造函数方法,它是构造函数方法调用的一个钩子,可以让您轻松自定义对象初始化。(调用了实际的构造函数,__new__但您不需要知道这一点,并且可能永远不需要直接与它交互,更不用说更改它了。)