Python中的inheritance和init方法

我是Python的乞丐。 我无法理解inheritance和__init__()

 class Num: def __init__(self,num): self.n1 = num class Num2(Num): def show(self): print self.n1 mynumber = Num2(8) mynumber.show() 

结果: 8

还行吧。 但我用Num2replace

 class Num2(Num): def __init__(self,num): self.n2 = num*2 def show(self): print self.n1,self.n2 

结果: Error. Num2 has no attribute "n1". Error. Num2 has no attribute "n1".

在这种情况下, Num2如何访问n1

在第一种情况下, Num2扩展了Num类,因为你没有在Num2重新定义名为__init__()的特殊方法,所以它从Numinheritance。

当一个类定义了一个__init__()方法时,类实例自动为新创build的类实例调用__init__()

在第二种情况下,由于您正在重新定义Num2 __init__() ,如果要扩展其行为,则需要显式调用超类( Num )中的那个。

 class Num2(Num): def __init__(self,num): Num.__init__(self,num) self.n2 = num*2 

当你重写init时,你也需要调用父类的init

 super(Num2, self).__init__(num) 

用__init __()方法理解Python super()

由于您不调用Num.__init__ ,因此永远不会创build字段“n1”。 调用它,然后它将在那里。