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中self的用法
Jun 04 Python
python实现图书馆研习室自动预约功能
Apr 27 Python
python 一个figure上显示多个图像的实例
Jul 08 Python
使用python将多个excel文件合并到同一个文件的方法
Jul 09 Python
基于python 微信小程序之获取已存在模板消息列表
Aug 05 Python
简单了解python协程的相关知识
Aug 31 Python
python模拟实现斗地主发牌
Jan 07 Python
Python属性和内建属性实例解析
Jan 14 Python
pygame实现弹球游戏
Apr 14 Python
keras在构建LSTM模型时对变长序列的处理操作
Jun 29 Python
Python爬取网站图片并保存的实现示例
Feb 26 Python
python - asyncio异步编程
Apr 06 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
PHP Document 代码注释规范
2009/04/13 PHP
微信公众平台网页授权获取用户基本信息中授权回调域名设置的变动
2014/10/21 PHP
thinkPHP分组后模板无法加载问题解决方法
2016/07/12 PHP
利用PHP如何写APP接口详解
2016/08/23 PHP
关于PHP5.6+版本“No input file specified”问题的解决
2019/12/11 PHP
下载站控制介绍字数显示的脚本 显示全部 隐藏介绍等功能
2009/09/19 Javascript
javascript 异步页面查询实现代码(asp.net)
2010/05/26 Javascript
用jquery实现点击栏目背景色改变
2012/12/10 Javascript
用函数模板,写一个简单高效的 JSON 查询器的方法介绍
2013/04/17 Javascript
JavaScript实现简单的时钟实例代码
2013/11/23 Javascript
Javascript 拖拽雏形中的一些问题(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
jquery图片切换插件
2015/03/16 Javascript
JQuery实现鼠标移动图片显示描述层的方法
2015/06/25 Javascript
js中substring和substr两者区别和使用方法
2015/11/09 Javascript
Angularjs实现带查找筛选功能的select下拉框示例代码
2016/10/04 Javascript
Bootstrap table简单使用总结
2017/02/15 Javascript
利用vue+elementUI实现部分引入组件的方法详解
2017/11/22 Javascript
angularJS开发注意事项
2018/05/26 Javascript
在vue项目中,将juery设置为全局变量的方法
2018/09/25 Javascript
基于Vue实现可以拖拽的树形表格实例详解
2018/10/18 Javascript
移动端H5页面返回并刷新页面(BFcache)的方法
2018/11/06 Javascript
React降级配置及Ant Design配置详解
2018/12/27 Javascript
在vue项目中 实现定义全局变量 全局函数操作
2020/10/26 Javascript
[04:38]完美世界携手游戏风云打造 卡尔工作室饰品系统篇
2013/04/25 DOTA
Python 网络编程起步(Socket发送消息)
2008/09/06 Python
解析Python中的二进制位运算符
2015/05/13 Python
Python之ReportLab绘制条形码和二维码的实例
2018/01/15 Python
简单了解python元组tuple相关原理
2019/12/02 Python
html5的canvas方法使用指南
2014/12/15 HTML / CSS
亲戚结婚的请假条
2014/02/11 职场文书
《满井游记》教学反思
2014/02/26 职场文书
幼儿园大班毕业教师寄语
2014/04/03 职场文书
带病坚持工作事迹
2014/05/03 职场文书
2014预备党员党课学习心得范文
2014/07/08 职场文书
班级出游活动计划书
2014/08/15 职场文书
镇党委书记群众路线整改措施思想汇报
2014/10/13 职场文书