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

时间:2010-03-10 22:57:35

标签: python

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

以下是我到目前为止的一个例子:

super

这是对的吗?

谢谢,Boda Cydo。

3 个答案:

答案 0 :(得分:51)

这是正确的。请注意,您也可以直接在__init__类上调用Base方法,如下所示:

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

这就是我一般这样做的方式。但它是气馁的,因为它在多重继承的情况下表现不佳。当然,多重继承本身就有各种奇怪的效果,所以我就像瘟疫一样避免它。

一般情况下,如果你继承的课程使用super,你也需要。

答案 1 :(得分:35)

如果您使用的是Python 3.1,则super是新的并且已经过改进。它为您计算出类和实例参数。所以你应该不用参数调用super:

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

答案 2 :(得分:12)

是的,这是正确的。如果您希望能够将value传递到Child课程,您可以这样做

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