在子类中调用父类的方法super
1、没有super之前,在子类里面需要父类里面的逻辑,但是我们是通过派生(自己定义了一个init,增加了一条line)
class vehichle:#定义一个交通工具的类 Country="China" def __init__(self,name,speed,load,power): self.name=name self.speed=speed self.load=load self.power=power def run(self): print("开动啦") class Subway(vehichle):#定义一个地铁,继承父类vehichle # pass#如果自己没有init,Subway会继承父类的init方法 def __init__(self,name,speed,load,power,line): self.name=name self.speed=speed self.load=load self.power=power self.line=line def show_info(self): print(self.name,self.line) line13=Subway("北京地铁","10km/s","10000人","电",13)#实例化一个line13 line13.show_info()#用实例调用类的属性,会自动把实例本身穿进去 C:\python35\python3.exe D:/pyproject/day25/在子类中调用父类.py 北京地铁 13
2、改进一下,在子类中调用父类的init方法
class vehichle:#定义一个交通工具的类 Country="China" def __init__(self,name,speed,load,power): self.name=name self.speed=speed self.load=load self.power=power def run(self): print("开动啦") class Subway(vehichle):#定义一个地铁,继承父类vehichle # pass#如果自己没有init,Subway会继承父类的init方法 def __init__(self,name,speed,load,power,line): vehichle.__init__(self,name,speed,load,power)#调用父类的init方法 self.line=line def show_info(self): print(self.name,self.speed,self.load,self.line) line13=Subway("北京地铁","10km/s","10000人","电",13)#实例化一个line13 line13.show_info()#用实例调用类的属性,会自动把实例本身穿进去 C:\python35\python3.exe D:/pyproject/day25/在子类中调用父类.py 北京地铁 10km/s 10000人 13
3、在子类里面也调用一下父类的run方法
class vehichle:#定义一个交通工具的类 Country="China" def __init__(self,name,speed,load,power): self.name=name self.speed=speed self.load=load self.power=power def run(self): print("开动啦") print("父类的开动啦") class Subway(vehichle):#定义一个地铁,继承父类vehichle # pass#如果自己没有init,Subway会继承父类的init方法 def __init__(self,name,speed,load,power,line): vehichle.__init__(self,name,speed,load,power)#调用父类的init方法 self.line=line def show_info(self): print(self.name,self.speed,self.load,self.line) def run(self): vehichle.run(self) print("%s %s 开动啦" %(self.name,self.line)) line13=Subway("北京地铁","10km/s","10000人","电","13号线")#实例化一个line13 line13.show_info()#用实例调用类的属性,会自动把实例本身穿进去 line13.run() C:\python35\python3.exe D:/pyproject/day25/在子类中调用父类.py 北京地铁 10km/s 10000人 13号线 开动啦 父类的开动啦 北京地铁 13号线 开动啦
4、super方法 调用父类的方法
super的方法的好处是,当你的父类的名字改变之后,只需要在Subway那里继承的名字改一下,就行,不用动下面的逻辑
第一种写法:
class vehichle:#定义一个交通工具的类 Country="China" def __init__(self,name,speed,load,power): self.name=name self.speed=speed self.load=load self.power=power def run(self): print("开动啦") print("父类的开动啦") class Subway(vehichle):#定义一个地铁,继承父类vehichle # pass#如果自己没有init,Subway会继承父类的init方法 def __init__(self,name,speed,load,power,line): # vehichle.__init__(self,name,speed,load,power)#调用父类的init方法 super().__init__(name,speed,load,power)#调用父类的init self.line=line def show_info(self): print(self.name,self.speed,self.load,self.line) def run(self): # vehichle.run(self) super().run()#调用父类的run print("%s %s 开动啦" %(self.name,self.line)) line13=Subway("北京地铁","10km/s","10000人","电","13号线")#实例化一个line13 line13.show_info()#用实例调用类的属性,会自动把实例本身穿进去 line13.run() C:\python35\python3.exe D:/pyproject/day25/super方法的使用.py 北京地铁 10km/s 10000人 13号线 开动啦 父类的开动啦 北京地铁 13号线 开动啦 第二种写法: super().__init__(name,speed,load,power)等价于 super(Subway,self).__init__(name,speed,load,power) super().run()等价于 super(Subway,self).run()
我们记住上面的第一种就行了,有的人写第二种我们也要能看懂
class vehichle:#定义一个交通工具的类 Country="China" def __init__(self,name,speed,load,power): self.name=name self.speed=speed self.load=load self.power=power def run(self): print("开动啦") print("父类的开动啦") class Subway(vehichle):#定义一个地铁,继承父类vehichle # pass#如果自己没有init,Subway会继承父类的init方法 def __init__(self,name,speed,load,power,line): # vehichle.__init__(self,name,speed,load,power)#调用父类的init方法 # super().__init__(name,speed,load,power)#调用父类的init super(Subway,self).__init__(name,speed,load,power)#调用父类的init self.line=line def show_info(self): print(self.name,self.speed,self.load,self.line) def run(self): # vehichle.run(self) # super().run()#调用父类的run super(Subway,self).run() # 调用父类的run print("%s %s 开动啦" %(self.name,self.line)) line13=Subway("北京地铁","10km/s","10000人","电","13号线")#实例化一个line13 line13.show_info()#用实例调用类的属性,会自动把实例本身穿进去 line13.run() C:\python35\python3.exe D:/pyproject/day25/super方法的使用.py 北京地铁 10km/s 10000人 13号线 开动啦 父类的开动啦 北京地铁 13号线 开动啦