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中的文件I/O操作
May 24 Python
简单介绍Python中的readline()方法的使用
May 24 Python
Python使用PIL库实现验证码图片的方法
Mar 11 Python
TensorFlow平台下Python实现神经网络
Mar 10 Python
Atom的python插件和常用插件说明
Jul 08 Python
python实现播放音频和录音功能示例代码
Dec 30 Python
Python批量生成幻影坦克图片实例代码
Jun 04 Python
python爬虫 线程池创建并获取文件代码实例
Sep 28 Python
Django实现前台上传并显示图片功能
May 29 Python
Keras之fit_generator与train_on_batch用法
Jun 17 Python
python利用faker库批量生成测试数据
Oct 15 Python
python scrapy简单模拟登录的代码分析
Jul 21 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 cURL和Rolling cURL并发方式比较
2013/10/30 PHP
php过滤HTML标签、属性等正则表达式汇总
2014/09/22 PHP
php中使用in_array() foreach array_search() 查找数组是否包含时的性能对比
2015/04/14 PHP
jQuery 白痴级入门教程
2009/11/11 Javascript
JS延迟加载(setTimeout) JS最后加载
2010/07/15 Javascript
FireFox下XML对象转化成字符串的解决方法
2011/12/09 Javascript
javascript返回顶部效果(自写代码)
2013/01/06 Javascript
早该知道的7个JavaScript技巧
2013/03/27 Javascript
node.js中的fs.fchmodSync方法使用说明
2014/12/16 Javascript
zTree插件下拉树使用入门教程
2016/04/11 Javascript
jQuery模仿阿里云购买服务器选择购买时间长度的代码
2016/04/29 Javascript
jQuery ajaxSubmit 实现ajax提交表单局部刷新
2016/07/04 Javascript
bootstrap弹出层的多种触发方式
2017/05/10 Javascript
jQuery实现div跟随鼠标移动
2020/08/20 jQuery
解决Extjs下拉框不显示的问题
2017/06/21 Javascript
vue组件Prop传递数据的实现示例
2017/08/17 Javascript
seaJs使用心得之exports与module.exports的区别实例分析
2017/10/13 Javascript
uni-app之APP和小程序微信授权方法
2019/05/09 Javascript
解决vue项目F5刷新mounted里的函数不执行问题
2019/11/05 Javascript
Python使用scrapy采集时伪装成HTTP/1.1的方法
2015/04/08 Python
Python使用面向对象方式创建线程实现12306售票系统
2015/12/24 Python
Python实现二叉搜索树
2016/02/03 Python
Python遍历pandas数据方法总结
2018/02/09 Python
浅谈python中requests模块导入的问题
2018/05/18 Python
Python3中详解fabfile的编写
2018/06/24 Python
python函数的作用域及关键字详解
2019/08/20 Python
使用纯 CSS 创作一个脉动 loader效果的源码
2018/09/28 HTML / CSS
大学生暑期实践感言
2014/02/26 职场文书
干部考核评语
2014/04/29 职场文书
希特勒经典演讲稿
2014/05/19 职场文书
学校先进集体事迹材料
2014/05/31 职场文书
《微笑着面对生活》优秀演讲稿范文
2014/09/23 职场文书
债务授权委托书范本
2014/10/17 职场文书
2015年音乐教研组工作总结
2015/07/22 职场文书
高三毕业感言
2015/07/30 职场文书
Android存储中最基本的文件存储方式
2022/04/30 Java/Android