目錄python
零基礎 Python 學習路線推薦 : Python 學習目錄 >> Python 基礎入門編程
Python 內置函數 super 主要用於類的多繼承中,用來查找並調用父類的方法,因此在單重繼承中用不用 super 都不要緊;可是,使用 super 是一個好的習慣。通常咱們在子類中須要調用父類的方法時纔會這麼用;ide
''' 參數: type — 類,通常是類名; object-or-type — 類,通常是 self; 返回值:無 ''' super(type,object-or-type)
# !usr/bin/env python # -*- coding:utf-8 _*- """ @Author:猿說編程 @Blog(我的博客地址): www.codersrc.com @File:Python super 函數.py @Time:2021/04/29 07:37 @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 的大量代碼中去查找、修改基類名,另一方面代碼的可移植性和重用性也更高。函數
# !usr/bin/env python # -*- coding:utf-8 _*- """ @Author:猿說編程 @Blog(我的博客地址): www.codersrc.com @File:Python super 函數.py @Time:2021/04/29 07:37 @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 完成,例如:學習
# !usr/bin/env python # -*- coding:utf-8 _*- """ @Author:猿說編程 @Blog(我的博客地址): www.codersrc.com @File:Python super 函數.py @Time:2021/04/29 07:37 @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): 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() ''' 輸出結果: 汪汪汪 不是普通狗,能飛 '''