一、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()

输出结果:

汪汪汪

不是普通狗,能飞

pythonsuper用法_python super函数使用方法详解相关推荐

  1. python的property用法_Python的@property使用方法详解

    1. 作用 将类方法转换为类属性,可以用 . 直接获取属性值或者对属性进行赋值 2.实现方式 使用property类来实现,也可以使用property装饰器实现,二者本质是一样的.多数情况下用装饰器实 ...

  2. python decimal用法_Python decimal模块使用方法详解

    decimal 模块:decimal意思为十进制,这个模块提供了十进制浮点运算支持 1.可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确. 2.要从浮点数据转换为 ...

  3. c语言memset函数用法,C语言memset函数使用方法详解

    C语言memset函数使用方法详解 一.函数原形   void *  memset(void*s, int ch,size_t n) 二.函数作用  将以s内存地址为首的连续n个字节的内容置成ch,一 ...

  4. python中累加函数_对Python实现累加函数的方法详解

    对Python实现累加函数的方法详解 发布时间:2020-10-26 00:02:44 来源:脚本之家 阅读:120 作者:岚漾忆雨 这个需求比较奇怪,要求实现Sum和MagaSum函数,实现以下功能 ...

  5. scanf函数使用方法详解

    scanf函数使用方法详解 一.scanf函数是什么? 二.scanf函数的作用 三.注意事项 1.输入数据 2.%c 四.字段宽度 五.scanf函数的返回值 一.scanf函数是什么? 1.首先我 ...

  6. c语言memset函数作用,C语言memset函数使用方法详解

    C语言memset函数使用方法详解 一.函数原形   void *  memset(void*s,int ch,size_t n) 二.函数作用  将以s内存地址为首的连续n个字节的内容置成ch,一般 ...

  7. Python的hasattr() getattr() setattr() 函数使用方法详解

    Python的hasattr() getattr() setattr() 函数使用方法详解 (一) hasattr(object,name) 函数 判断一个对象里面是否有 name 属性或者 name ...

  8. python中堆排序_Python实现堆排序的方法详解

    本文实例讲述了Python实现堆排序的方法.分享给大家供大家参考,具体如下: 堆排序作是基本排序方法的一种,类似于合并排序而不像插入排序,它的运行时间为O(nlogn),像插入排序而不像合并排序,它是 ...

  9. python中的sep参数_Python sep参数使用方法详解

    Python sep参数使用方法详解 这篇文章主要介绍了Python sep参数使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Pyth ...

最新文章

  1. 太火!这本AI图书微软强推,程序员靠它拿下50K!
  2. python时钟程序的设计总结_Python实现时钟显示效果思路详解
  3. C#的反射机制调用方法
  4. 无序数组求第k大的数 python_整数无序数组求第K大数
  5. python的setup.py文件及其常用命令
  6. 『ACM-算法-二分法』算法竞赛进阶指南--在单调递增序列a中查找大于等于X的数中最小的一个,即X或X的后继
  7. jzoj3510-最短路径【dp】
  8. SpringBoot集成Maven工程
  9. hive 导出json格式 文件_Magicodes.IE在.NET Core中通过请求头导出多种格式文件
  10. 【渝粤教育】国家开放大学2018年春季 0551-21T素描(二) 参考试题
  11. 你知道R中的赋值符号箭头(lt;-)和等号(=)的区别吗?
  12. office 2016安装包
  13. AD转换的一个硬件实现原理
  14. Android Bluetooth HCI log 详解
  15. 我在b站上推荐一个看小电影的网站,结果被骂了
  16. 外事不决问元芳,内事不决找搜狗------简评搜狗语音助手
  17. 【实战讲解】数据血缘落地实施
  18. windows 10目标文件夹访问被拒绝(没有权限)或者(你需要来自XXX的权限才能对此文件夹进行更改 )
  19. 网站点击流日志数据分析
  20. 电路邱关源学习笔记——1.5电压源和电流源

热门文章

  1. RedHat7.0更新yum源(踩过的坑)
  2. 计算机工程类高级职称,2019年工程类中高级职称都有哪些专业?
  3. ubuntu下如何切换输入法
  4. grub光盘修复,硬盘修复
  5. neutron服务重启导致部分设备tag变成4095问题
  6. 简单三步搭建一对一直播源码系统
  7. 刚学编程的程序员必备这5大编程网站,你知道几个?
  8. IE 8兼容小妙招~~
  9. Debian 光盘安装简易教程
  10. Java中ClassLoader浅析.