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 08 Python
浅析python 内置字符串处理函数的使用方法
Jun 11 Python
Django中模型Model添加JSON类型字段的方法
Jun 17 Python
Python 爬虫爬取指定博客的所有文章
Feb 17 Python
非递归的输出1-N的全排列实例(推荐)
Apr 11 Python
Django框架反向解析操作详解
Nov 28 Python
使用python实现希尔、计数、基数基础排序的代码
Dec 25 Python
Pyorch之numpy与torch之间相互转换方式
Dec 31 Python
tensorflow 重置/清除计算图的实现
Jan 19 Python
Python如何使用队列方式实现多线程爬虫
May 12 Python
Python+PyQt5+MySQL实现天气管理系统
Jun 16 Python
详解python网络进程
Jun 15 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
isset和empty的区别
2007/01/15 PHP
PHP中IP地址与整型数字互相转换详解
2014/08/20 PHP
php使用curl通过代理获取数据的实现方法
2016/05/16 PHP
PHP如何通过表单直接提交大文件详解
2019/01/08 PHP
PHP5.5基于mysqli连接MySQL数据库和读取数据操作实例详解
2019/02/16 PHP
PHP调用全国天气预报数据接口查询天气示例
2019/02/20 PHP
不错的新闻标题颜色效果
2006/12/10 Javascript
jQuery 翻牌或百叶窗效果(内容三秒自动切换)
2012/06/14 Javascript
基于JQuery的模拟苹果桌面Dock效果(稳定版)
2012/10/15 Javascript
getComputedStyle与currentStyle获取样式(style/class)
2013/03/19 Javascript
JSON序列化与解析原生JS方法且IE6和chrome测试通过
2013/09/05 Javascript
js实现人才网站职位选择功能的方法
2015/08/14 Javascript
js数组去重的5种算法实现
2015/11/04 Javascript
jQuery实时显示鼠标指针位置和键盘ASCII码
2016/03/28 Javascript
基于BootStrap Metronic开发框架经验小结【八】框架功能总体界面介绍
2016/05/12 Javascript
Bootstrap框架实现广告轮播效果
2016/11/28 Javascript
JS基于面向对象实现的拖拽功能示例
2016/12/20 Javascript
前端面试知识点锦集(JavaScript篇)
2016/12/28 Javascript
js 简易版滚动条实例(适用于移动端H5开发)
2017/06/26 Javascript
JavaScript条件判断_动力节点Java学院整理
2017/06/26 Javascript
JS判断Android、iOS或浏览器的多种方法(四种方法)
2017/06/29 Javascript
Angular5.0 子组件通过service传递值给父组件的方法
2018/07/13 Javascript
微信小程序在text文本实现多种字体样式
2019/11/08 Javascript
Python利用Beautiful Soup模块创建对象详解
2017/03/27 Python
浅谈Python基础之I/O模型
2017/05/11 Python
Django获取该数据的上一条和下一条方法
2019/08/12 Python
python支付宝支付示例详解
2019/08/22 Python
python连接PostgreSQL数据库的过程详解
2019/09/18 Python
如何在django中添加日志功能
2020/02/06 Python
解决django框架model中外键不落实到数据库问题
2020/05/20 Python
PyTorch之nn.ReLU与F.ReLU的区别介绍
2020/06/27 Python
Auguste The Label官网:澳大利亚一家精品女装时尚品牌
2020/06/14 全球购物
《台湾的蝴蝶谷》教学反思
2014/02/20 职场文书
给校长的建议书
2014/03/12 职场文书
javascript的setTimeout()使用方法总结
2021/11/20 Javascript
前端传参数进行Mybatis调用mysql存储过程执行返回值详解
2022/08/14 MySQL