目录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() ''' 输出结果: 汪汪汪 不是普通狗,能飞 '''