在子類中調用父類的方法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號線 開動啦


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM