python super函数使用方法详解


Posted in Python onFebruary 14, 2020

一、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()

输出结果:

汪汪汪

不是普通狗,能飞

Python 相关文章推荐
python中列表元素连接方法join用法实例
Apr 07 Python
简介Python设计模式中的代理模式与模板方法模式编程
Feb 02 Python
python 简单备份文件脚本v1.0的实例
Nov 06 Python
一篇文章快速了解Python的GIL
Jan 12 Python
Python3用tkinter和PIL实现看图工具
Jun 21 Python
利用Pandas读取文件路径或文件名称包含中文的csv文件方法
Jul 04 Python
python装饰器常见使用方法分析
Jun 26 Python
Python3列表List入门知识附实例
Feb 09 Python
Python3.7实现验证码登录方式代码实例
Feb 14 Python
PyPDF2读取PDF文件内容保存到本地TXT实例
May 12 Python
.img/.hdr格式转.nii格式的操作
Jul 01 Python
python如何将mat文件转为png
Jul 15 Python
python字符串,元组,列表,字典互转代码实例详解
Feb 14 #Python
python集成开发环境配置(pycharm)
Feb 14 #Python
基于python-pptx库中文文档及使用详解
Feb 14 #Python
python pptx复制指定页的ppt教程
Feb 14 #Python
打包PyQt5应用时的注意事项
Feb 14 #Python
如何使用Python抓取网页tag操作
Feb 14 #Python
python使用python-pptx删除ppt某页实例
Feb 14 #Python
You might like
西德产收音机
2021/03/01 无线电
基于flush()不能按顺序输出时的解决办法
2013/06/29 PHP
PHP中执行cmd命令的方法
2014/10/11 PHP
JQuery实现表格中相同单元格合并示例代码
2013/06/26 Javascript
js写的评论分页(还不错)
2013/12/23 Javascript
js进行表单验证实例分析
2015/02/10 Javascript
jquery 获取select数组与name数组长度的实现代码
2016/06/20 Javascript
jQuery旋转插件jqueryrotate用法详解
2016/10/13 Javascript
Vue的Flux框架之Vuex状态管理器
2017/07/30 Javascript
Vue中自定义全局组件的实现方法
2017/12/08 Javascript
详解刷新页面vuex数据不消失和不跳转页面的解决
2018/01/30 Javascript
Three.js实现3D机房效果
2018/12/30 Javascript
vue项目中使用vue-i18n报错的解决方法
2019/01/13 Javascript
vue+echarts实现动态折线图的方法与注意
2020/09/01 Javascript
Python使用logging结合decorator模式实现优化日志输出的方法
2016/04/16 Python
python3如何将docx转换成pdf文件
2018/03/23 Python
python 定时修改数据库的示例代码
2018/04/08 Python
解决pycharm 误删掉项目文件的处理方法
2018/10/22 Python
tensorflow:指定gpu 限制使用量百分比,设置最小使用量的实现
2020/02/06 Python
python 实现字符串下标的输出功能
2020/02/13 Python
解决pytorch-yolov3 train 报错的问题
2020/02/18 Python
html5使用canvas画一条线
2014/12/15 HTML / CSS
雅诗兰黛旗下专业男士保养领导品牌:Lab Series
2017/05/15 全球购物
英国护发和美妆在线商店:Klip Shop
2019/03/24 全球购物
JD Sports西班牙:英国领先的运动服装公司
2020/01/06 全球购物
会话Bean的种类
2013/11/07 面试题
小学教研工作制度
2014/01/15 职场文书
我为自己代言广告词
2014/03/18 职场文书
诚信考试承诺书
2014/03/27 职场文书
欢迎新生标语
2014/10/06 职场文书
2015年幼儿园学前班工作总结
2015/05/18 职场文书
Nginx反爬虫策略,防止UA抓取网站
2021/03/31 Servers
python迷宫问题深度优先遍历实例
2021/06/20 Python
JavaScript高级程序设计之基本引用类型
2021/11/17 Javascript
动画「进击的巨人」第86话播出感谢绘公开
2022/03/21 日漫
《艾尔登法环》1.03.3补丁上线 碎星伤害调整
2022/04/07 其他游戏