How to correctly call base class methods (and constructor) from inherited classes in Python?
本问题已经有最佳答案,请猛点这里访问。
假设我有一个
以下是迄今为止我所拥有的一个例子:
1 2 3 4 5 6 7 8 9 10 | 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 ... |
这是正确的吗?
谢谢,博达·赛多。
没错。注意,您也可以直接在
1 2 3 4 | class Child(Base): def __init__(self, something_else): Base.__init__(self, value = 20) self.something_else = something_else |
这就是我通常的做法。但这是不鼓励的,因为它在多重继承的情况下表现不太好。当然,多重继承本身有各种奇怪的影响,所以我像避免瘟疫一样避免它。
一般来说,如果您从使用
如果您使用的是python 3.1,super是新的和改进的。它为您计算出类和实例参数。因此,您应该调用super而不带参数:
1 2 3 4 5 | class Child(Base): def __init__(self, value, something_else): super().__init__(value) self.something_else = something_else ... |
是的,没错。如果你想把
1 2 3 4 5 | class Child(Base): def __init__(self, value, something_else): super(Child, self).__init__(value) self.something_else = something_else ... |