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 29 Python
Django框架中数据的连锁查询和限制返回数据的方法
Jul 17 Python
python编程实现希尔排序
Apr 13 Python
浅谈使用Python变量时要避免的3个错误
Oct 30 Python
windows 下python+numpy安装实用教程
Dec 23 Python
Vue的el-scrollbar实现自定义滚动
May 29 Python
Python实现端口检测的方法
Jul 24 Python
Python WEB应用部署的实现方法
Jan 02 Python
Python实现插入排序和选择排序的方法
May 12 Python
Python PyQt5 Pycharm 环境搭建及配置详解(图文教程)
Jul 16 Python
python实现批量处理将图片粘贴到另一张图片上并保存
Dec 12 Python
python实现一次性封装多条sql语句(begin end)
Jun 06 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
《魔兽争霸3:重制版》更新 多项视觉效果调整
2020/05/04 魔兽争霸
phpmyadmin操作流程
2006/10/09 PHP
phpize的深入理解
2013/06/03 PHP
ThinkPHP简单使用memcache缓存的方法
2016/11/15 PHP
php微信高级接口调用方法(自定义菜单接口、客服接口、二维码)
2016/11/28 PHP
Laravel5.1 框架控制器基础用法实例分析
2020/01/04 PHP
简单的JS多重继承示例
2008/03/13 Javascript
JavaScript 组件之旅(一)分析和设计
2009/10/28 Javascript
Asp.net下使用Jquery Ajax传送和接收DataTable的代码
2010/09/12 Javascript
jquery中通过过滤器获取表单元素的实现代码
2011/07/05 Javascript
JavaScript(js)设置默认输入焦点(focus)
2012/12/28 Javascript
js简单实现竖向tab选项卡的方法
2015/05/04 Javascript
ES6中如何使用Set和WeakSet
2016/03/10 Javascript
JS实现的颜色实时渐变效果完整实例
2016/03/25 Javascript
bootstrap vue.js实现tab效果
2017/02/07 Javascript
深入浅析Node.js单线程模型
2017/07/10 Javascript
解决Vue打包之后文件路径出错的问题
2018/03/06 Javascript
vue 动态设置img的src地址无效,npm run build 后找不到文件的解决
2020/07/26 Javascript
vue 路由meta 设置导航隐藏与显示功能的示例代码
2020/09/04 Javascript
python fabric使用笔记
2015/05/09 Python
Python os模块学习笔记
2015/06/21 Python
python利用Guetzli批量压缩图片
2017/03/23 Python
Python多进程multiprocessing.Pool类详解
2018/04/27 Python
python批量修改ssh密码的实现
2019/08/08 Python
Python列表原理与用法详解【创建、元素增加、删除、访问、计数、切片、遍历等】
2019/10/30 Python
Python读取实时数据流示例
2019/12/02 Python
浅谈Pycharm最有必要改的几个默认设置项
2020/02/14 Python
python 插入日期数据到Oracle实例
2020/03/02 Python
keras 简单 lstm实例(基于one-hot编码)
2020/07/02 Python
html如何对span设置宽度
2019/10/30 HTML / CSS
阿联酋网上花店:Ferns N Petals
2018/02/14 全球购物
简历中个人自我评价范文
2013/12/26 职场文书
书香校园建设方案
2014/05/02 职场文书
我的未来不是梦演讲稿
2014/09/02 职场文书
2014年法院工作总结
2014/11/24 职场文书
Tomcat安装使用及部署Web项目的3种方法汇总
2022/08/14 Servers