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
还行吧。 但我用Num2
replace
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__()
的特殊方法,所以它从Num
inheritance。
当一个类定义了一个
__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”。 调用它,然后它将在那里。