python中的super是什么?
技术背景
python中的super,名为超类,可以简单的理解为执行父类的__init__函数。由于在python中不论是一对一的继承,还是一子类继承多个父类,都会涉及到执行的先后顺序的问题。那么本文就着重看下super的具体作用。
案例测试
通过设计这样一个案例,我们可以明确super的前后逻辑关系:先定义一个父类initial
,在这个父类中有参数值param
和函数func
,然后用子类new
来继承父类initial
。继承之后,在子类的__init__
函数中super
执行的前后去打印参数值param
和函数func
的返回值,相关代码如下所示:
# 定义父类
class initial(object):def __init__(self):print ('This print is from initial object')# 定义父类参数self.param = 3# 定义父类函数def func(self):return 1# 定义子类
class new(initial):def __init__(self):print ('This print is from new object')# 打印子类函数值print (self.func())# 执行父类初始化函数super(new, self).__init__()# 打印父类参数值print(self.param)self.param = 4# 定义子类函数def func(self):return 2if __name__ == '__main__':new()
代码的执行结果如下所示:
This print is from new object
2
This print is from initial object
3
结果分析
首先我们注意到,父类initial
中的__init__
函数内的打印语句,是在super之后才输出的,这说明了,super
函数是在执行父类的初始化操作。那么如果没有执行super
,new
子类对initial
父类的继承体现在哪里呢?答案就是父类的成员函数,比如这样的一个案例:
class initial(object):def __init__(self):print ('This print is from initial object')self.param = 3def func(self):return 1class new(initial):def __init__(self):print ('This print is from new object')print (self.func())super(new, self).__init__()print(self.param)self.param = 4if __name__ == '__main__':new()
其实就是删掉了子类中重载的成员函数,那么得到的结果如下:
This print is from new object
1
This print is from initial object
3
可以发现在执行super之前就可以打印父类的func
函数的函数值。所以python中继承的逻辑是这样的:
也正是因为只有执行了super
才能初始化父类中的成员变量,因此如果在super之前是无法访问父类的成员变量的。
总结概要
本文通过一个python的实际案例的设计,来讲解python面向对象的技术——类的继承中必用的super函数的逻辑。其实我们可以把python中类的继承理解成这样的一个过程:当我们在括号中明确了父类时,其实已经引用了父类的成员函数,但是并没有执行父类的初始化函数。在执行子类的初始化函数的同时,会检查是否重载了父类的成员函数,如果重载则会直接覆盖。而只有在执行了super之后,才相当于执行了父类的初始化函数,此时才可以访问父类的成员变量。
版权声明
本文首发链接为:https://www.cnblogs.com/dechinphy/p/super.html
作者ID:DechinPhy
更多原著文章请参考:https://www.cnblogs.com/dechinphy/
打赏专用链接:https://www.cnblogs.com/dechinphy/gallery/image/379634.html
腾讯云专栏同步:https://cloud.tencent.com/developer/column/91958
python中的super是什么?相关推荐
- Python中的super()函数
多路继承的问题 描述: 解决这样的问题Python中可以使用super() super()函数有点: (1)在父类中可以直接的调用未绑定的方法 (2)在确保所有的父类的构造方法都使用了super()函 ...
- Python中的super()用法
Python中的super()方法设计目的是用来解决多重继承时父类的查找问题,所以在单重继承中用不用 super 都没关系:但是,使用 super() 是一个好的习惯.一般我们在子类中需要调用父类的方 ...
- python中的super用法详解_【Python】【类】super用法详解
一.问题的发现与提出 在Python类的方法(method)中,要调用父类的某个方法,在Python 2.2以前,通常的写法如代码段1: 代码段1: class A: def __init__(sel ...
- python中的super用法详解_Python中super函数用法实例分析
本文实例讲述了python中super函数用法.分享给大家供大家参考,具体如下: 这是个高大上的函数,在python装13手册里面介绍过多使用可显得自己是高手 23333. 但其实他还是很重要的. 简 ...
- python中superclass是什么_深度解析并实现python中的super(转载,好文)
大神半个月的成绩,让我看的叹为观止,建议看原帖地址,会让你对Python的描述符有更强的认识. 原文链接:https://blog.csdn.net/zhangjg_blog/article/deta ...
- Python中的super()简单用法
如果在子类中也定义了_init_()函数,那么该如何调用基类的_init_()函数: 方法一.明确指定 : class C(P):def __init__(self):P.__init__(self) ...
- pythonsuper继承规则,深入理解Python中的super()方法
前言 python的类分别有新式类和经典类,都支持多继承.在类的继承中,如果你想要重写父类的方法而不是覆盖的父类方法,这个时候我们可以使用super()方法来实现 python语言与C++有相似的类继 ...
- 5分钟了解 Python 中的super函数是如何实现继承的
Py 2.x 和 Py 3.x 中有一个很大的区别就是类,无论是类的定义还是类的继承.Py 3.x 中类的继承可以直接使用 super() 关键字代替原来的 super(Class, self). 那 ...
- pythonsuper函数_认识python中的super函数
需求分析 在类继承中,存在这么一种情况: class Human(object): def Move(self): print("我会走路...") class Man(Human ...
最新文章
- 驱动 2.4'' TFT 串口触摸屏
- 2020年人工智能领域的最大创新
- java取geosever数据_Geoserver - 连接到SQL Server 2008 Express并获取数据
- JDBC连接mysql、创建表、操作数据、PreparedStatement防注入、sql语句返回值类型知识汇总
- 外观、体验升级 HUAWEI WATCH 2 Pro成智能手表领航者
- java jpanel 叠加_java – 如何在JPanel上叠加,调整大小和居中组件?
- 10 SystemVerilog语言编写SPI发送
- dta乱码_DTA是自动化索引的出色工具
- 单通道GNSS模拟器行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- python中处理WordNet
- 使用jdk进行数据迁移(sqlite迁移mysql)
- 共轭梯度法Matlab的实现
- 澳洲java5年的评价薪水有多少,刚刚,澳洲平均薪资出炉,感受一下世界第一的最低薪资标准!...
- C++算法之化繁为简的分治法
- 泰坦尼克号乘客获救预测
- 用turtle作画玩一玩吧
- 这些微信头像,你敢换吗?
- bat 批处理 B站缓存视频转成 .mp4格式
- 如何编辑简单打字游戏
- oracle数据安全管理实验,第四次Oracle数据库上机实验-bistu