您好,登錄后才能下訂單哦!
python內置函數super()主要用于類的多繼承中,用來查找并調用父類的方法,所以在單重繼承中用不用 super 都沒關系;但是,使用 super() 是一個好的習慣。一般我們在子類中需要調用父類的方法時才會這么用;
super(type,object-or-type)
參數:
type — 類,一般是類名;
object-or-type — 類,一般是 self;
返回值:無
1.案例一:
# !usr/bin/env python # -*- coding:utf-8 _*- """ @Author:何以解憂 @Blog(個人博客地址): shuopython.com @WeChat Official Account(微信公眾號):猿說python @Github:www.github.com @File:python_super.py @Time:2019/12/29 21:25 @Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累! """ class A: def m(self): print('A') class B: def m(self): print('B') class C(A): def m(self): print('C') super().m() C().m()
輸出結果:
C
A
代碼分析:
這樣做的好處就是:如果你要改變子類繼承的父類(由A改為B),你只需要修改一行代碼(class C(A): -> class C(B))即可,而不需要在class C的大量代碼中去查找、修改基類名,另外一方面代碼的可移植性和重用性也更高。
2.案例二:
# !usr/bin/env python # -*- coding:utf-8 _*- """ @Author:何以解憂 @Blog(個人博客地址): shuopython.com @WeChat Official Account(微信公眾號):猿說python @Github:www.github.com @File:python_super.py @Time:2019/12/29 21:25 @Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累! """ class Dog: def __init__(self): self.fly = False def print_fly(self): if self.fly: print('不是普通狗,能飛') else: print('普用狗不會飛') class xiaotianquan(Dog): def __init__(self): self.sound = True def print_sing(self): if self.sound: print("汪汪汪") else: print("假狗狗") if __name__ == '__main__': dog = xiaotianquan() dog.print_sing() # 能正常輸出 dog.print_fly() # 報錯,AttributeError: 'xiaotianquan' object has no attribute 'fly'
代碼分析:
雖然子類xiaotianquan繼承父類Dog,但是子類直接調用父類的print_fly函數,依然會報錯,因為子類沒有父類的fly屬性,上面代碼可以通過在__init__函數中調用super()完成,例如:
class Dog: def __init__(self): self.fly = False def print_fly(self): if self.fly: print('不是普通狗,能飛') else: print('普用狗不會飛') class xiaotianquan(Dog): def __init__(self): super().__init__() # 等效 super(xiaotianquan,self).__init__() self.fly = True self.sound = True def print_sing(self): if self.sound: print("汪汪汪") else: print("假狗狗") if __name__ == '__main__': dog = xiaotianquan() dog.print_sing() dog.print_fly()
輸出結果:
汪汪汪
不是普通狗,能飛
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。