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字符串连接方式汇总
Aug 21 Python
简单实现python数独游戏
Mar 30 Python
Pytorch入门之mnist分类实例
Apr 14 Python
python 检查文件mime类型的方法
Dec 08 Python
对python中的six.moves模块的下载函数urlretrieve详解
Dec 19 Python
python实现Virginia无密钥解密
Mar 20 Python
Python实现简单的列表冒泡排序和反转列表操作示例
Jul 10 Python
Python使用type关键字创建类步骤详解
Jul 23 Python
python实现XML解析的方法解析
Nov 16 Python
详解python中groupby函数通俗易懂
May 14 Python
如何验证python安装成功
Jul 06 Python
Python-openpyxl表格读取写入的案例详解
Nov 02 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生成zip压缩文件的方法详解
2013/06/09 PHP
thinkphp实现面包屑导航(当前位置)例子分享
2014/05/10 PHP
wordpress安装过程中遇到中文乱码的处理方法
2015/04/21 PHP
php实现水印文字和缩略图的方法示例
2016/12/29 PHP
PHP实现二维数组去重功能示例
2017/01/12 PHP
php连接sftp的作用以及实例代码
2019/09/23 PHP
Thinkphp 框架扩展之应用模式实现方法分析
2020/04/27 PHP
在Javascript中定义对象类别
2006/12/22 Javascript
用tip解决Ext列宽度不够的问题
2008/12/13 Javascript
jquery $(this).attr $(this).val方法使用介绍
2013/10/08 Javascript
nodejs 提示‘xxx’ 不是内部或外部命令解决方法
2014/11/20 NodeJs
js强制把网址设为默认首页
2015/09/29 Javascript
Bootstrap实现带动画过渡的弹出框
2016/08/09 Javascript
jquery实现文本框的禁用和启用
2016/12/07 Javascript
jquery实现左右滑动式轮播图
2017/03/02 Javascript
JS实现随机生成10个手机号的方法示例
2018/12/07 Javascript
Vue动态生成el-checkbox点击无法赋值的解决方法
2019/02/21 Javascript
js动态获取时间的方法分析
2019/08/02 Javascript
JavaScript简单编程实例学习
2020/02/14 Javascript
Javascript表单序列化原理及实现代码详解
2020/10/30 Javascript
js中延迟加载和预加载的具体使用
2021/01/14 Javascript
开源Web应用框架Django图文教程
2017/03/09 Python
详解python中的json和字典dict
2018/06/22 Python
Python操作excel的方法总结(xlrd、xlwt、openpyxl)
2019/09/02 Python
Python字符串hashlib加密模块使用案例
2020/03/10 Python
python如何代码集体右移
2020/07/20 Python
Cecil Mode法国在线商店:女性时尚
2021/01/08 全球购物
C/C++ 笔试、面试题目大汇总
2015/11/21 面试题
会计大学生职业生涯规划书范文
2014/01/13 职场文书
装修致歉信
2014/01/15 职场文书
大学生毕业自我鉴定范文
2014/02/03 职场文书
2014年重阳节敬老活动方案
2014/09/16 职场文书
2014法院四风问题对照检查材料思想汇报
2014/10/04 职场文书
建国大业观后感800字
2015/06/01 职场文书
一文搞懂Python Sklearn库使用
2021/08/23 Python
vue elementUI批量上传文件
2022/04/26 Vue.js