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中Random和Math模块学习笔记
May 18 Python
Python中使用插入排序算法的简单分析与代码示例
May 04 Python
Python实现将Excel转换为json的方法示例
Aug 05 Python
python编写简易聊天室实现局域网内聊天功能
Jul 28 Python
Python XlsxWriter模块Chart类用法实例分析
Mar 11 Python
Django 创建后台,配置sqlite3教程
Nov 18 Python
python定义类self用法实例解析
Jan 22 Python
关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)
Feb 20 Python
Python计算指定日期是今年的第几天(三种方法)
Mar 26 Python
pytorch 中的重要模块化接口nn.Module的使用
Apr 02 Python
python压包的概念及实例详解
Feb 17 Python
python 爬取天气网卫星图片
Jun 07 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写入WRITE编码为UTF8的文件的实现代码
2008/07/07 PHP
解析yii数据库的增删查改
2013/06/20 PHP
laravel-admin 管理平台获取当前登陆用户信息的例子
2019/10/08 PHP
Nigma vs Liquid BO3 第二场2.13
2021/03/10 DOTA
myeclipse安装jQuery插件的方法
2011/03/29 Javascript
基于jquery的bankInput银行卡账号格式化
2012/08/22 Javascript
js单词形式的运算符
2014/05/06 Javascript
jQuery实现可以控制图片旋转角度效果(附demo源码下载)
2016/01/27 Javascript
ajax实现加载页面、删除、查看详细信息 bootstrap美化页面!
2017/03/14 Javascript
node.js博客项目开发手记
2018/03/16 Javascript
js使用Promise实现简单的Ajax缓存
2018/11/14 Javascript
Vue2.x通用编辑组件的封装及应用详解
2019/05/28 Javascript
通过Nodejs搭建网站简单实现注册登录流程
2019/06/14 NodeJs
[02:51]DOTA2英雄基础教程 艾欧
2014/01/13 DOTA
[48:02]Ti4循环赛第三日 VG vs Liquid和NEWBEE vs DK
2014/07/12 DOTA
python通过BF算法实现关键词匹配的方法
2015/03/13 Python
Python中扩展包的安装方法详解
2017/06/14 Python
python中set()函数简介及实例解析
2018/01/09 Python
Python 模拟动态产生字母验证码图片功能
2019/12/24 Python
解决python 读取 log日志的编码问题
2019/12/24 Python
pycharm 更改创建文件默认路径的操作
2020/02/15 Python
Python编程快速上手——强口令检测算法案例分析
2020/02/29 Python
Python程序慢的重要原因
2020/09/04 Python
Nike香港官网:Nike HK
2019/03/23 全球购物
含精油的天然有机化妆品:Indemne
2019/08/27 全球购物
瑞士图书网站:Weltbild.ch
2019/09/17 全球购物
匡威西班牙官网:Converse西班牙
2019/10/01 全球购物
三维科技面试题
2013/07/27 面试题
.TTL是什么?有什么用处,通常那些工具会用到它?(ping? traceroute? ifconfig? netstat?)
2016/05/09 面试题
大学自我鉴定
2013/12/20 职场文书
早餐连锁店计划书
2014/01/08 职场文书
干部培训自我鉴定
2014/01/22 职场文书
社团招新策划书
2014/02/04 职场文书
关于读书的演讲稿500字
2014/08/27 职场文书
2014年大学生职业规划书:未来不是梦,只要勇敢冲!
2014/09/22 职场文书
2014年房地产工作总结范文
2014/11/19 职场文书