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连接mysql驱动有关问题(windows版本)
Apr 23 Python
Python实现解析Bit Torrent种子文件内容的方法
Aug 29 Python
python同时遍历数组的索引和值的实例
Nov 15 Python
Windows下Python3.6安装第三方模块的方法
Nov 22 Python
Python闭包思想与用法浅析
Dec 27 Python
python多线程分块读取文件
Aug 29 Python
用Python写一个自动木马程序
Sep 17 Python
python getpass实现密文实例详解
Sep 24 Python
python 变量初始化空列表的例子
Nov 28 Python
python numpy数组复制使用实例解析
Jan 10 Python
Python中的整除和取模实例
Jun 03 Python
通过自学python能找到工作吗
Jun 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及Zend Engine的线程安全模型分析
2011/11/10 PHP
php 操作数组(合并,拆分,追加,查找,删除等)
2012/07/20 PHP
php绘制一个矩形的方法
2015/01/24 PHP
Zend Framework使用Zend_Loader组件动态加载文件和类用法详解
2016/12/09 PHP
Django中的cookie与session操作实例代码
2017/08/17 PHP
PHP实现微信退款功能
2018/10/02 PHP
nodejs实现黑名单中间件设计
2014/06/17 NodeJs
使用AngularJS创建自定义的过滤器的方法
2015/06/18 Javascript
分享JavaScript与Java中MD5使用两个例子
2015/12/23 Javascript
Webwork 实现文件上传下载代码详解
2016/02/02 Javascript
javascript轮播图算法
2016/10/21 Javascript
JavaScript之DOM_动力节点Java学院整理
2017/07/03 Javascript
详解TypeScript+Vue 插件 vue-class-component的使用总结
2019/02/18 Javascript
详解vue-video-player使用心得(兼容m3u8)
2019/08/23 Javascript
JavaScript生成一个不重复的ID的方法示例
2019/09/16 Javascript
JavaScript实现网页下拉菜单效果
2020/11/20 Javascript
JavaScript中条件语句的优化技巧总结
2020/12/04 Javascript
微信小程序自定义modal弹窗组件的方法详解
2020/12/20 Javascript
使用Python构建Hopfield网络的教程
2015/04/14 Python
Python常见异常分类与处理方法
2017/06/04 Python
Python内置模块ConfigParser实现配置读写功能的方法
2018/02/12 Python
Anaconda下配置python+opencv+contribx的实例讲解
2018/08/06 Python
Django Rest framework之认证的实现代码
2018/12/17 Python
Django用户认证系统 组与权限解析
2019/08/02 Python
python相对企业语言优势在哪
2020/06/12 Python
欧洲顶级的童装奢侈品购物网站:Bambini Fashion(面向全球)
2018/04/24 全球购物
德国在线购买葡萄酒网站:Geile Weine
2019/09/24 全球购物
管理科学大学生求职信
2013/11/13 职场文书
优秀共产党员先进事迹
2014/01/27 职场文书
综治工作心得体会
2014/09/11 职场文书
办公室卫生管理制度
2015/08/04 职场文书
《自然之道》读后感3篇
2019/12/17 职场文书
Node实现搜索框进行模糊查询
2021/06/28 Javascript
MySQL创建定时任务
2022/01/22 MySQL
python实现手机推送 代码也就10行左右
2022/04/12 Python
css弧边选项卡的项目实践
2023/05/07 HTML / CSS