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实现多线程行情抓取工具的方法
Feb 28 Python
Python实现的求解最大公约数算法示例
May 03 Python
Tensorflow 查看变量的值方法
Jun 14 Python
对numpy中数组转置的求解以及向量内积计算方法
Oct 31 Python
Django组件之cookie与session的使用方法
Jan 10 Python
学习python的前途 python挣钱
Feb 27 Python
python3+PyQt5 创建多线程网络应用-TCP客户端和TCP服务器实例
Jun 17 Python
python实现递归查找某个路径下所有文件中的中文字符
Aug 31 Python
WxPython实现无边框界面
Nov 18 Python
使用pyqt 实现重复打开多个相同界面
Dec 13 Python
Python使用Matlab命令过程解析
Jun 04 Python
Python中非常使用的6种基本变量的操作与技巧
Mar 22 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/12/06 PHP
PHP对象Object的概念 介绍
2012/06/14 PHP
php切割页面div内容的实现代码分享
2012/07/31 PHP
php中get_headers函数的作用及用法的详细介绍
2013/04/27 PHP
分享php邮件管理器源码
2016/01/06 PHP
PHP双向链表定义与用法示例
2018/01/31 PHP
JS中字符问题(二进制/十进制/十六进制及ASCII码之间的转换)
2008/11/03 Javascript
仿淘宝TAB切换搜索框搜索切换的相关内容
2014/09/21 Javascript
jquery制作 随机弹跳的小球特效
2015/02/01 Javascript
浅谈javascript中this在事件中的应用
2015/02/15 Javascript
js实现类似菜单风格的TAB选项卡效果代码
2015/08/28 Javascript
微信小程序 网络API 上传、下载详解
2016/11/09 Javascript
关于Stream和Buffer的相互转换详解
2017/07/26 Javascript
基于LayUI分页和LayUI laypage分页的使用示例
2017/08/02 Javascript
Windows安装Node.js报错:2503、2502的解决方法
2017/10/25 Javascript
react-native使用leanclound消息推送的方法
2018/08/06 Javascript
JSON.stringify()方法讲解
2019/01/31 Javascript
Python中字符串的常见操作技巧总结
2016/07/28 Python
Python用UUID库生成唯一ID的方法示例
2016/12/15 Python
python抽取指定url页面的title方法
2018/05/11 Python
一百多行python代码实现抢票助手
2018/09/25 Python
django 2.2和mysql使用的常见问题
2019/07/18 Python
基于python实现自动化办公学习笔记(CSV、word、Excel、PPT)
2019/08/06 Python
python实现梯度下降和逻辑回归
2020/03/24 Python
Python数据正态性检验实现过程
2020/04/18 Python
pycharm开发一个简单界面和通用mvc模板(操作方法图解)
2020/05/27 Python
Python识别验证码的实现示例
2020/09/30 Python
利用CSS3实现毛玻璃效果示例源码
2016/09/25 HTML / CSS
AmazeUI 列表的实现示例
2020/08/17 HTML / CSS
C++:memset ,memcpy和strcpy的根本区别
2013/04/27 面试题
门卫人员岗位职责
2013/12/24 职场文书
关于热爱祖国的演讲稿
2014/05/04 职场文书
学生鉴定评语大全
2014/05/05 职场文书
预备党员入党感言
2015/08/01 职场文书
保护环境建议书作文500字
2015/09/14 职场文书
深入浅析Redis 集群伸缩原理
2021/05/15 Redis