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 相关文章推荐
Python3基础之函数用法
Aug 13 Python
Python 正则表达式(转义问题)
Dec 15 Python
Python字符串处理之count()方法的使用
May 18 Python
在Python中处理字符串之isdigit()方法的使用
May 18 Python
wxPython定时器wx.Timer简单应用实例
Jun 03 Python
Python贪心算法实例小结
Apr 22 Python
python 匹配url中是否存在IP地址的方法
Jun 04 Python
Scrapy基于selenium结合爬取淘宝的实例讲解
Jun 13 Python
Python内存读写操作示例
Jul 18 Python
python实现计数排序与桶排序实例代码
Mar 28 Python
Python如何创建装饰器时保留函数元信息
Aug 07 Python
详解torch.Tensor的4种乘法
Sep 03 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实现四种基础排序算法的运行时间比较(推荐)
2016/08/11 PHP
PHP实现导出带样式的Excel
2016/08/28 PHP
ExtJS TabPanel beforeremove beforeclose使用说明
2010/03/31 Javascript
扩展jquery实现客户端表格的分页、排序功能代码
2011/03/16 Javascript
jquery text(),val(),html()方法区别总结
2013/11/04 Javascript
js实现单行文本向上滚动效果实例代码
2013/11/28 Javascript
js 金额格式化来回转换示例
2014/02/23 Javascript
AngularJs上传前预览图片的实例代码
2017/01/20 Javascript
微信小程序 利用css实现遮罩效果实例详解
2017/01/21 Javascript
js 性能优化之算法和流程控制
2017/02/15 Javascript
ES6下React组件的写法示例代码
2017/05/04 Javascript
js弹性势能动画之抛物线运动实例详解
2017/07/27 Javascript
Javascript快速实现浏览器系统通知
2017/08/26 Javascript
微信小程序实现刷脸登录
2018/05/25 Javascript
简单易扩展可控性强的Jquery转盘抽奖程序
2019/03/16 jQuery
LayUI switch 开关监听 获取属性值、更改状态的方法
2019/09/21 Javascript
python简单的函数定义和用法实例
2015/05/07 Python
实现python版本的按任意键继续/退出
2016/09/26 Python
Python在信息学竞赛中的运用及Python的基本用法(详解)
2017/08/15 Python
Flask解决跨域的问题示例代码
2018/02/12 Python
django中的HTML控件及参数传递方法
2018/03/20 Python
在Python中输入一个以空格为间隔的数组方法
2018/11/13 Python
python写入文件自动换行问题的方法
2019/07/05 Python
利用python实现凯撒密码加解密功能
2020/03/31 Python
python 生成正态分布数据,并绘图和解析
2020/12/21 Python
微软开源最强Python自动化神器Playwright(不用写一行代码)
2021/01/05 Python
CSS3 边框效果
2019/11/04 HTML / CSS
北美主要的汽车零部件零售商:AutoShack.com
2019/02/23 全球购物
网友共享的几个面试题关于Java和Unix等方面的
2016/09/08 面试题
个人诉讼委托书范本
2014/10/17 职场文书
2015年财务试用期工作总结
2014/12/24 职场文书
教师学期末个人总结
2015/02/13 职场文书
英文慰问信
2015/02/14 职场文书
市场部岗位职责范本
2015/04/15 职场文书
浅谈Python基础之列表那些事儿
2021/05/11 Python
利用 JavaScript 构建命令行应用
2021/11/17 Javascript