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下如何让web元素的生成更简单的分析
Jul 17 Python
python读取html中指定元素生成excle文件示例
Apr 03 Python
python中getaddrinfo()基本用法实例分析
Jun 28 Python
qpython3 读取安卓lastpass Cookies
Jun 19 Python
python实现超简单的视频对象提取功能
Jun 04 Python
python使用matplotlib画饼状图
Sep 25 Python
对numpy下的轴交换transpose和swapaxes的示例解读
Jun 26 Python
pandas中ix的使用详细讲解
Mar 09 Python
什么是Python变量作用域
Jun 03 Python
pycharm远程连接vagrant虚拟机中mariadb数据库
Jun 05 Python
python3检查字典传入函数键是否齐全的实例
Jun 05 Python
python使用selenium爬虫知乎的方法示例
Oct 28 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 图片上传实现代码 带详细注释
2010/04/29 PHP
PHP的cURL库功能简介 抓取网页、POST数据及其他
2011/04/07 PHP
Warning: session_destroy() : Trying to destroy uninitialized sessionq错误
2011/06/16 PHP
php判断输入是否是纯数字,英文,汉字的方法
2015/03/05 PHP
在PHP程序中使用Rust扩展的方法
2015/07/03 PHP
PHP实现图片自动清理的方法
2015/07/08 PHP
php文件扩展名判断及获取文件扩展名的N种方法
2015/09/12 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
js或css文件后面跟参数的原因说明
2010/01/09 Javascript
jquery 滚动条事件简单实例
2013/07/12 Javascript
js锁屏解屏通过对$.ajax进行封装实现
2014/07/31 Javascript
Bootstrap select多选下拉框实现代码
2016/12/23 Javascript
jQuery实现百度图片移入移出内容提示框上下左右移动的效果
2018/06/05 jQuery
Vue下路由History模式打包后页面空白的解决方法
2018/06/29 Javascript
JS计算斐波拉切代码实例
2019/09/12 Javascript
JS实现鼠标按下拖拽效果
2020/07/23 Javascript
python打开网页和暂停实例
2014/09/30 Python
Python 基于Twisted框架的文件夹网络传输源码
2016/08/28 Python
浅谈Python peewee 使用经验
2017/10/20 Python
Python各类图像库的图片读写方式总结(推荐)
2018/02/23 Python
Python numpy 提取矩阵的某一行或某一列的实例
2018/04/03 Python
Python图像处理之颜色的定义与使用分析
2019/01/03 Python
Python Django 前后端分离 API的方法
2019/08/28 Python
Python算法中的时间复杂度问题
2019/11/19 Python
python3.6.5基于kerberos认证的hive和hdfs连接调用方式
2020/06/06 Python
用opencv给图片换背景色的示例代码
2020/07/08 Python
html5 Canvas画图教程(2)—画直线与设置线条的样式如颜色/端点/交汇点
2013/01/09 HTML / CSS
详解HTML5中表单验证的8种方法介绍
2016/12/19 HTML / CSS
linux下进程间通信的方式
2013/01/23 面试题
计算机专业毕业生自我鉴定
2014/01/16 职场文书
乡镇群众路线教育实践活动整改措施
2014/10/04 职场文书
配置nginx 重定向到系统维护页面
2021/06/08 Servers
ROS系统将python包编译为可执行文件的简单步骤
2021/07/25 Python
MySQL空间数据存储及函数
2021/09/25 MySQL
MySQL实例精讲单行函数以及字符数学日期流程控制
2021/10/15 MySQL
Win10服务全部禁用了怎么启动?Win10服务全部禁用解决方法
2022/09/23 数码科技