如何在Python中正确调用继承类的基类方法(和构造函数)?
假设我有一个叫做 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
,那么你也需要使用它。