super函數的用法

 

1.建立一個類.

# 1.建立一個類
class Bird:
    def __init__(self):
        self.hungry =True

    def eat(self):
        if self.hungry:
            print("Ahhhhh")
            self.hungry=False
        else:
            print("No Thanks.")


#實例化.
b= Bird()

#調用方法.打印的結果爲:Ahhhhh
b.eat()

#再一次調用eat方法.打印結果:No Thanks.
b.eat()

 

2. 建立一個子類.

#2. 建立一個子類.
class SongBird(Bird):
    def __init__(self):
        self.sound ="Squawk!"

    def sing(self):
        print(self.sound)

#實例化
sb =SongBird()

#調用方法,打印結果爲:Squawk!
sb.sing()

#調用eat方法,報錯.
sb.eat()

#爲何報錯, SongBird 沒有屬性Hungry ,SongBird重寫了構造函數,可是新的構造函數沒有任何初始化屬性hungry.
# 解決辦法1.調用未關聯的超類構造函數
#        2. 使用super方法.

 

3.子類的解決辦法

#3. 子類的解決辦法:
class SongBird(Bird):
    def __init__(self):
       # Bird.__init__(self) #1. 調用超類構造函數. super().__init__() #2. 經過super方法調用.
        self.sound= "squawk!"

    def sing(self):
        print(self.sound)

sb =SongBird()
sb.sing() #squawk!
sb.eat() #Ahhhhh
sb.eat()  #No Thanks.
相關文章
相關標籤/搜索