python super函式使用方法詳解
阿新 • • 發佈:2020-02-14
一、super函式簡介
python內建函式super()主要用於類的多繼承中,用來查詢並呼叫父類的方法,所以在單重繼承中用不用 super 都沒關係;但是,使用 super() 是一個好的習慣。一般我們在子類中需要呼叫父類的方法時才會這麼用;
二、super函式語法
super(type,object-or-type)
引數:
type — 類,一般是類名;
object-or-type — 類,一般是 self;
返回值:無
三、super函式使用
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()
輸出結果:
汪汪汪
不是普通狗,能飛