我在理解 Python 中的继承时遇到了一些困难。我的印象是,当 Class B 继承自 Class A 时,它继承了 A 中初始化的所有值。我编写了一个示例来演示我的内容意思是:
Class A():
def __init__(self,parameter):
self.initialize_parameter=4*parameter
Class B(A):
def __init__(self):
pass
def function(self,another_parameter):
return self.initialize_parameter*another_parameter
但在这种情况下,调用:
B_instance=B()
print B_instance.function(10)
返回一个 AttributeError 表示类 B 没有 self.initialized_parameter
所以我的问题是,我是否必须手动将所有初始化从 A 复制并粘贴到 B,或者是否有一种方法可以在 B 中使用它们而不调用 A 类本身? (我希望这很清楚)。
请您参考如下方法:
如果您想在父类(super class)的构造函数中使用该行为,您不应该覆盖它:
Class B(A):
def function(self,another_parameter):
return self.initialize_parameter*another_parameter
或者,如果您想扩展初始化行为,您可以使用 super()
Class B(A):
def __init__(self, parameter)
super(B, self).__init__(2*parameter)
def function(self,another_parameter):
return self.initialize_parameter*another_parameter
在 Python 3 中,super() 不需要显式参数 (super().__init__())。
这种通用的覆盖行为和 super() 适用于所有方法,而不仅仅是构造函数。
