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

88 投票
3 回答
79169 浏览
提问于 2025-04-15 20:16

假设我有一个叫做 Base 的类,还有一个叫做 Child 的类,它是从 Base 类继承过来的。那么在 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。

3 个回答

13

没错,你说得对。如果你想把 value 传递给 Child 类,可以这样做:

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

如果你在使用 Python 3.1,super 这个功能有了新的改进。它会自动帮你搞定类和实例的参数。所以你可以直接调用 super,而不需要传入任何参数:

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

没错。要注意,你也可以直接在 Base 类上调用 __init__ 方法,像这样:

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

这就是我一般的做法。不过,这样做是不太推荐的,因为在多重继承的情况下,它的表现不是很好。当然,多重继承本身就有很多奇怪的效果,所以我尽量避免使用它。

一般来说,如果你继承的类使用了 super,那么你也需要使用它。

撰写回答