Python中的继承和初始化方法
我刚开始学Python,关于继承和__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
替换成了
class Num2(Num):
def __init__(self,num):
self.n2 = num*2
def show(self):
print self.n1,self.n2
结果:错误。Num2没有属性"n1"。
在这种情况下,Num2
怎么才能访问n1
呢?
5 个回答
27
在Num2类中做一个简单的修改,像这样:
super().__init__(num)
这样在python3中就能正常工作了。
class Num:
def __init__(self,num):
self.n1 = num
class Num2(Num):
def __init__(self,num):
super().__init__(num)
self.n2 = num*2
def show(self):
print (self.n1,self.n2)
mynumber = Num2(8)
mynumber.show()
47
194
在第一种情况下,Num2
是从 Num
这个类继承而来的,因为你没有在 Num2
中重新定义一个叫 __init__()
的特殊方法,所以它就自动继承了 Num
里的这个方法。
当一个类定义了
__init__()
方法时,每当你创建这个类的新实例时,__init__()
方法会自动被调用。
在第二种情况下,由于你在 Num2
中重新定义了 __init__()
,如果你想要保留 Num
类中的一些功能,就需要明确地调用父类(Num
)中的 __init__()
方法。
class Num2(Num):
def __init__(self,num):
Num.__init__(self,num)
self.n2 = num*2