pythonsuper用法_python super函数使用方法详解
一、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函数使用方法详解相关推荐
- python的property用法_Python的@property使用方法详解
1. 作用 将类方法转换为类属性,可以用 . 直接获取属性值或者对属性进行赋值 2.实现方式 使用property类来实现,也可以使用property装饰器实现,二者本质是一样的.多数情况下用装饰器实 ...
- python decimal用法_Python decimal模块使用方法详解
decimal 模块:decimal意思为十进制,这个模块提供了十进制浮点运算支持 1.可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确. 2.要从浮点数据转换为 ...
- c语言memset函数用法,C语言memset函数使用方法详解
C语言memset函数使用方法详解 一.函数原形 void * memset(void*s, int ch,size_t n) 二.函数作用 将以s内存地址为首的连续n个字节的内容置成ch,一 ...
- python中累加函数_对Python实现累加函数的方法详解
对Python实现累加函数的方法详解 发布时间:2020-10-26 00:02:44 来源:脚本之家 阅读:120 作者:岚漾忆雨 这个需求比较奇怪,要求实现Sum和MagaSum函数,实现以下功能 ...
- scanf函数使用方法详解
scanf函数使用方法详解 一.scanf函数是什么? 二.scanf函数的作用 三.注意事项 1.输入数据 2.%c 四.字段宽度 五.scanf函数的返回值 一.scanf函数是什么? 1.首先我 ...
- c语言memset函数作用,C语言memset函数使用方法详解
C语言memset函数使用方法详解 一.函数原形 void * memset(void*s,int ch,size_t n) 二.函数作用 将以s内存地址为首的连续n个字节的内容置成ch,一般 ...
- Python的hasattr() getattr() setattr() 函数使用方法详解
Python的hasattr() getattr() setattr() 函数使用方法详解 (一) hasattr(object,name) 函数 判断一个对象里面是否有 name 属性或者 name ...
- python中堆排序_Python实现堆排序的方法详解
本文实例讲述了Python实现堆排序的方法.分享给大家供大家参考,具体如下: 堆排序作是基本排序方法的一种,类似于合并排序而不像插入排序,它的运行时间为O(nlogn),像插入排序而不像合并排序,它是 ...
- python中的sep参数_Python sep参数使用方法详解
Python sep参数使用方法详解 这篇文章主要介绍了Python sep参数使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Pyth ...
最新文章
- 太火!这本AI图书微软强推,程序员靠它拿下50K!
- python时钟程序的设计总结_Python实现时钟显示效果思路详解
- C#的反射机制调用方法
- 无序数组求第k大的数 python_整数无序数组求第K大数
- python的setup.py文件及其常用命令
- 『ACM-算法-二分法』算法竞赛进阶指南--在单调递增序列a中查找大于等于X的数中最小的一个,即X或X的后继
- jzoj3510-最短路径【dp】
- SpringBoot集成Maven工程
- hive 导出json格式 文件_Magicodes.IE在.NET Core中通过请求头导出多种格式文件
- 【渝粤教育】国家开放大学2018年春季 0551-21T素描(二) 参考试题
- 你知道R中的赋值符号箭头(lt;-)和等号(=)的区别吗?
- office 2016安装包
- AD转换的一个硬件实现原理
- Android Bluetooth HCI log 详解
- 我在b站上推荐一个看小电影的网站,结果被骂了
- 外事不决问元芳,内事不决找搜狗------简评搜狗语音助手
- 【实战讲解】数据血缘落地实施
- windows 10目标文件夹访问被拒绝(没有权限)或者(你需要来自XXX的权限才能对此文件夹进行更改 )
- 网站点击流日志数据分析
- 电路邱关源学习笔记——1.5电压源和电流源