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”。 调用它,然后它将在那里。