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

时间:2013-06-15 02:58:17

标签: 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)

1 个答案:

答案 0 :(得分:8)

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

对于第二种形式,您正在寻找实现此方法的父类的父类,并且您必须有一个非常特殊的用例(如果您想跳过父类,请不要从它们派生)为了想做到这一点。

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

此外,第一种形式允许合作多重继承。请参阅this postthis writeup,了解有用或必要的情况。