Python中的继承和初始化方法
问题描述:
我是python的执行者。我无法理解继承和__init__()
。Python中的继承和初始化方法
class Num:
def __init__(self,num):
self.n1 = num
class Num2(Num):
def show(self):
print self.n1
mynumber = Num2(8)
mynumber.show()
结果:8
这是可行的。 Error. Num2 has no attribute "n1".
在这种情况下,怎么能Num2
访问n1
:但是我
class Num2(Num):
def __init__(self,num):
self.n2 = num*2
def show(self):
print self.n1,self.n2
结果替换Num2
?
答
的初始化在第一种情况下,Num2
是扩展类Num
因为你不重新定义特殊方法__init__()
Num2
,它从Num
继承。
当一个类定义了
__init__()
方法,类的实例化 自动调用__init__()
为 新创建的类实例。
在第二种情况下,因为你是在Num2
重新定义__init__()
你需要显式调用之一,如果你想扩展它的行为的超类(Num
)。
class Num2(Num):
def __init__(self,num):
Num.__init__(self,num)
self.n2 = num*2
答
+0
super(Num2,self).__ init __(num) – 2011-09-08 22:34:08
答
由于您没有拨打Num.__init__
,因此永远不会创建字段“n1”。调用它,然后它会在那里。
您的引用不足以解释为什么在派生类中未定义'__init__'方法时,它会被继承。这是因为_“如果在该类中没有找到请求的属性,搜索将继续查找基类。”_(doc) – eyquem 2011-08-14 22:08:22
对不起......基本上,继承是如何工作的......如果继承一个类,你得到整个包,所以,超类中的所有东西都存在于子类中。但是,如果你重新定义了一个方法,它会被覆盖......这就是你的代码。 – coya 2017-05-05 19:46:09