这些调用超类构造函数的方法有什么区别?

Ano*_*ity 0 python inheritance

如果调用超类启动函数的以下用法之间的重要区别怎么办?

class Child_1(Parent):
    def __init__(self):
        super(Child, self).__init__()

class Child_2(Parent):
    def __init__(self):
        super(Parent, self).__init__()

class Child_3(Parent):
    def __init__(self):
        Parent.__init__(self)
Run Code Online (Sandbox Code Playgroud)

小智 8

第一种形式(虽然你已经修复了拼写错误,并在调用super时将其设为Child_1)将是你通常想要的.这将在继承层次结构中查找正确的方法.

对于第二种形式,你正在寻找实现这种方法的父类的父类,你必须有一个非常特殊的用例(如果你想跳过父类,不要从它们派生),以便想要那样做.

在许多情况下,第三种情况与第一种情况相同,虽然没有看到父代码,但很难确定.第一种方法优于第三种方法的优点是您可以更改子级的基类,并且仍将调用正确的方法.

此外,第一种形式允许合作的多重继承.请参阅这篇文章或者这个书面记录来了解情况,这将是有用的或必要的.