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 相关文章推荐
Django框架中方法的访问和查找
Jul 15 Python
Python3.2模拟实现webqq登录
Feb 15 Python
tensorflow 获取变量&打印权值的实例讲解
Jun 14 Python
详解Python的数据库操作(pymysql)
Apr 04 Python
很酷的python表白工具 你喜欢我吗
Apr 11 Python
浅谈Python编程中3个常用的数据结构和算法
Apr 30 Python
Python安装Flask环境及简单应用示例
May 03 Python
详解python中groupby函数通俗易懂
May 14 Python
关于python的缩进规则的知识点详解
Jun 22 Python
Python中Selenium模块的使用详解
Oct 09 Python
Python如何导出导入所有依赖包详解
Jun 08 Python
Python虚拟环境virtualenv是如何使用的
Jun 20 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中的串行化变量和序列化对象
2006/09/05 PHP
PHP下对字符串的递增运算代码
2010/08/21 PHP
ThinkPHP3.1数据CURD操作快速入门
2014/06/19 PHP
PHP Cookie学习笔记
2016/08/23 PHP
PHP入门教程之日期与时间操作技巧总结(格式化,验证,获取,转换,计算等)
2016/09/11 PHP
可兼容php5与php7的cURL文件上传功能实例分析
2018/05/11 PHP
Laravel 集成微信用户登录和绑定的实现
2019/12/27 PHP
3分钟写出来的Jquery版checkbox全选反选功能
2013/10/23 Javascript
js判断字符是否是汉字的两种方法小结
2014/01/03 Javascript
JSON中双引号的轮回使用过程中一定要小心
2014/03/05 Javascript
JavaScript中实现单体模式分享
2015/01/29 Javascript
javascript基于DOM实现权限选择实例分析
2015/05/14 Javascript
javascript实现Email邮件显示与删除功能
2015/11/21 Javascript
JavaScript实现自动生成网页元素功能(按钮、文本等)
2015/11/21 Javascript
Vue.js快速入门实例教程
2016/10/15 Javascript
JS实现异步上传压缩图片
2017/04/22 Javascript
JavaScript事件方法(实例讲解)
2017/06/27 Javascript
Angular2仿照微信UI实现9张图片上传和预览的示例代码
2017/10/19 Javascript
Node使用Selenium进行前端自动化操作的代码实现
2019/10/10 Javascript
微信小程序scroll-view实现滚动到锚点左侧导航栏点餐功能(点击种类,滚动到锚点)
2020/06/11 Javascript
vue-quill-editor的使用及个性化定制操作
2020/08/04 Javascript
JavaScript实现打字游戏
2021/02/19 Javascript
[50:11]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第三场
2018/04/09 DOTA
[49:15]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第二场 1月19日
2021/03/11 DOTA
Python3.6.0+opencv3.3.0人脸检测示例
2018/05/25 Python
在Django model中设置多个字段联合唯一约束的实例
2019/07/17 Python
python 数据生成excel导出(xlwt,wlsxwrite)代码实例
2019/08/23 Python
pytorch方法测试详解——归一化(BatchNorm2d)
2020/01/15 Python
在Tensorflow中查看权重的实现
2020/01/24 Python
Python类中self参数用法详解
2020/02/13 Python
Python tempfile模块生成临时文件和临时目录
2020/09/30 Python
关于HTML5语义标签的实践(blog页面)
2016/07/12 HTML / CSS
HealthElement海外旗舰店:新西兰大卖场
2018/02/23 全球购物
Ariat英国官网:为世界顶级马术运动员制造最优质的鞋类和服装
2020/02/14 全球购物
乐高瑞士官方商店:LEGO CH
2020/08/16 全球购物
三年级作文之趣事作文
2019/11/04 职场文书