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

bod*_*ydo 56 python

假设我有一个继承自的Base类和ChildBase.从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
   ...
Run Code Online (Sandbox Code Playgroud)

它是否正确?

谢谢,Boda Cydo.

Chr*_* B. 53

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

class Child(Base):
    def __init__(self, something_else):
        Base.__init__(self, value = 20)
        self.something_else = something_else
Run Code Online (Sandbox Code Playgroud)

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

一般来说,如果你继承的类是使用的super,你也需要.


Don*_*ell 42

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

class Child(Base):
    def __init__(self, value, something_else):
        super().__init__(value)
        self.something_else = something_else
    ...
Run Code Online (Sandbox Code Playgroud)


Joh*_*ooy 12

对,那是正确的.如果你想能够value进入Child课堂,你可以这样做

class Child(Base):
   def __init__(self, value, something_else):
       super(Child, self).__init__(value)
       self.something_else = something_else
   ...
Run Code Online (Sandbox Code Playgroud)