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远程桌面协议RDPY安装使用介绍
Apr 15 Python
在Django中进行用户注册和邮箱验证的方法
May 09 Python
Python实现修改IE注册表功能示例
May 10 Python
mac PyCharm添加Python解释器及添加package路径的方法
Oct 29 Python
Python3自动签到 定时任务 判断节假日的实例
Nov 13 Python
python实现贪吃蛇游戏
Mar 21 Python
Python3的高阶函数map,reduce,filter的示例详解
Jul 23 Python
Python学习笔记之Break和Continue用法分析
Aug 14 Python
TensorFlow2.0:张量的合并与分割实例
Jan 19 Python
python Cartopy的基础使用详解
Nov 01 Python
python3实现Dijkstra算法最短路径的实现
May 12 Python
Python使用Web框架Flask开发项目
Jun 01 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 如何设置一个严格控制过期时间的session
2017/05/05 PHP
PHP上传文件及图片到七牛的方法
2018/07/25 PHP
JavaScript中数组的排序、乱序和搜索实现代码
2011/11/30 Javascript
jquery监听div内容的变化具体实现思路
2013/11/04 Javascript
javascript验证身份证号
2015/03/03 Javascript
Jquery动态添加输入框的方法
2015/05/29 Javascript
浅谈Nodejs观察者模式
2015/10/13 NodeJs
js实现精确到毫秒的倒计时效果
2016/08/05 Javascript
实例详解JSON取值(key是中文或者数字)方式
2017/08/24 Javascript
vue.js-div滚动条隐藏但有滚动效果的实现方法
2018/03/03 Javascript
基于axios 解决跨域cookie丢失的问题
2018/09/26 Javascript
jQuery实现模拟搜索引擎的智能提示功能简单示例
2019/01/27 jQuery
小程序绑定用户方案优化小结
2019/05/15 Javascript
解决antd 下拉框 input [defaultValue] 的值的问题
2020/10/31 Javascript
python搜索指定目录的方法
2015/04/29 Python
Python操作csv文件实例详解
2017/07/31 Python
python爬虫爬取快手视频多线程下载功能
2018/02/28 Python
Django Aggregation聚合使用方法解析
2019/08/01 Python
python集合的创建、添加及删除操作示例
2019/10/08 Python
Python带参数的装饰器运行原理解析
2020/06/09 Python
基于opencv的selenium滑动验证码的实现
2020/07/24 Python
Django数据库迁移常见使用方法
2020/11/12 Python
俄罗斯第一家多品牌在线奢侈品精品店:Aizel.ru
2020/09/06 全球购物
数字天堂软件测试面试题
2012/12/23 面试题
土木工程专业大学毕业生求职信
2013/10/13 职场文书
年会活动策划方案
2014/01/23 职场文书
小学英语教学反思案例
2014/02/04 职场文书
网络书店创业计划书
2014/02/07 职场文书
煤矿班组长竞聘书
2014/03/31 职场文书
九年级历史教学反思
2016/02/19 职场文书
什么是求职信?求职信应包含哪些内容?
2019/08/14 职场文书
Django debug为True时,css加载失败的解决方案
2021/04/24 Python
OpenCV 图像梯度的实现方法
2021/07/25 Python
P站美图推荐——变身女主角特辑
2022/03/20 日漫
Java由浅入深通关抽象类与接口(上篇)
2022/04/26 Java/Android