如何在 Python 中正确地从继承的类调用基类方法(和构造函数) ?

假设我有一个 Base类和一个从 Base继承的 Child类。在 Python 中从子类调用基类的构造函数的正确方法是什么?我使用 super吗?

以下是我目前所掌握的一个例子:

class Base(object):
def __init__(self, value):
self.value = value
...


class Child(Base):
def __init__(self, something_else):
super(Child, self).__init__(value=20)
self.something_else = something_else
...

是这样吗?

谢谢 Boda Cydo。

71558 次浏览

注意,您也可以直接在 Base类上调用 __init__方法,如下所示:

class Child(Base):
def __init__(self, something_else):
Base.__init__(self, value = 20)
self.something_else = something_else

我一般都是这么做的。但是它不被鼓励,因为它在多重继承面前表现得不是很好。当然,多重继承本身也有各种奇怪的影响,所以我像躲避瘟疫一样躲避它。

一般来说,如果您从中继承的类使用 super,那么您也需要。

是的,没错。如果您希望能够将 value传递给 Child类,那么可以这样做

class Child(Base):
def __init__(self, value, something_else):
super(Child, self).__init__(value)
self.something_else = something_else
...

如果您正在使用 Python 3.1,super 是新的和改进的。它为您计算出类和实例参数。所以你应该不带参数地调用 super:

class Child(Base):
def __init__(self, value, something_else):
super().__init__(value)
self.something_else = something_else
...