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號線 開動啦