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