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二叉树遍历的实现方法
Nov 21 Python
python中的全局变量用法分析
Jun 09 Python
python 重命名轴索引的方法
Nov 10 Python
python 公共方法汇总解析
Sep 16 Python
python实现简易淘宝购物
Nov 22 Python
Python爬虫程序架构和运行流程原理解析
Mar 09 Python
在keras里面实现计算f1-score的代码
Jun 15 Python
Windows下Sqlmap环境安装教程详解
Aug 04 Python
详解Python 函数参数的拆解
Sep 02 Python
python3代码中实现加法重载的实例
Dec 03 Python
使用Python爬虫爬取小红书完完整整的全过程
Jan 19 Python
8g内存用python读取10文件_面试题-python 如何读取一个大于 10G 的txt文件?
May 28 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
简单介绍下 PHP5 中引入的 MYSQLI的用途
2007/03/19 PHP
比较全面的PHP数组的使用方法小结
2010/09/23 PHP
php加水印的代码(支持半透明透明打水印,支持png透明背景)
2013/01/17 PHP
PHP获取毫秒级时间戳的方法
2015/04/15 PHP
thinkPHP自动验证机制详解
2016/12/05 PHP
PHP 多任务秒级定时器的实现方法
2018/05/13 PHP
不同浏览器的怪癖小结
2010/07/11 Javascript
Jquery对select的增、删、改、查操作
2015/02/06 Javascript
JavaScript取得键盘按下方向键是哪个的方法
2015/08/04 Javascript
js实现表单Radio切换效果的方法
2015/08/17 Javascript
jQuery Mobile中的button按钮组件基础使用教程
2016/05/23 Javascript
AngularJS Ajax详解及示例代码
2016/08/17 Javascript
图片懒加载插件实例分享(含解析)
2017/01/09 Javascript
JS排序之冒泡排序详解
2017/04/08 Javascript
JavaScript基于对象方法实现数组去重及排序操作示例
2018/07/10 Javascript
解决vue打包后vendor.js文件过大问题
2019/07/03 Javascript
Vue前端判断数据对象是否为空的实例
2020/09/02 Javascript
[01:56]林书豪DOTA2上海特级锦标赛励志短片
2016/03/05 DOTA
Python操作Word批量生成文章的方法
2015/07/28 Python
Python pass详细介绍及实例代码
2016/11/24 Python
详谈python3中用for循环删除列表中元素的坑
2018/04/19 Python
Python定时任务sched模块用法示例
2018/07/16 Python
Python使用folium excel绘制point
2019/01/03 Python
Python实现的爬取百度文库功能示例
2019/02/16 Python
Python使用configparser读取ini配置文件
2020/05/25 Python
python def 定义函数,调用函数方式
2020/06/02 Python
路易威登和香奈儿手袋:LuxeDH
2017/01/12 全球购物
Bluebella德国官网:英国性感内衣和睡衣品牌
2019/11/08 全球购物
职业规划书如何设计?
2014/01/09 职场文书
人力资源职位说明书
2014/07/29 职场文书
2014年纪检监察工作总结
2014/11/11 职场文书
2015年端午节国旗下演讲稿
2015/03/19 职场文书
广告策划的实习心得体会总结!
2019/07/22 职场文书
java如何实现socket连接方法封装
2021/09/25 Java/Android
springboot+zookeeper实现分布式锁
2022/03/21 Java/Android
Python中time与datetime模块使用方法详解
2022/03/31 Python