Python中super().__init__()测试以及理解


Posted in Python onDecember 06, 2021

python里的super().init()有什么用?

对于python里的super().__init__()有什么作用,很多同学没有弄清楚。

直白的说super().__init__(),就是继承父类的init方法,同样可以使用super()点 其他方法名,去继承其他方法。

Python super().__init__()测试

 测试一、我们尝试下面代码,没有super(A, self).__init__()时调用A的父类Root的属性和方法(方法里不对Root数据进行二次操作)

class Root(object):
    def __init__(self):
        self.x= '这是属性'

    def fun(self):
    	#print(self.x)
        print('这是方法')
        
class A(Root):
    def __init__(self):
        print('实例化时执行')

test = A()		#实例化类
test.fun()	#调用方法
test.x		#调用属性

下面是结果:

Traceback (most recent call last):

实例化时执行

这是方法

  File "/hom/PycharmProjects/untitled/super.py", line 17, in <module>

    test.x  # 调用属性

AttributeError: 'A' object has no attribute 'x'

可以看到此时父类的方法继承成功,可以使用,但是父类的属性却未继承,并不能用

测试二、我们尝试下面代码,没有super(A,self).__init__()时调用A的父类Root的属性和方法(方法里对Root数据进行二次操作)

class Root(object):
    def __init__(self):
        self.x= '这是属性'

    def fun(self):
    	print(self.x)
        print('这是方法')
        
class A(Root):
    def __init__(self):
        print('实例化时执行')

test = A()		#实例化类
test.fun()	#调用方法
test.x		#调用属性

结果如下

Traceback (most recent call last):

  File "/home/PycharmProjects/untitled/super.py", line 16, in <module>

    test.fun()  # 调用方法

  File "/home/PycharmProjects/untitled/super.py", line 6, in fun

    print(self.x)

AttributeError: 'A' object has no attribute 'x'

可以看到此时报错和测试一相似,果然,还是不能用父类的属性

测试三、我们尝试下面代码,加入super(A, self).__init__()时调用A的父类Root的属性和方法(方法里对Root数据进行二次操作)

class Root(object):
    def __init__(self):
        self.x = '这是属性'

    def fun(self):
        print(self.x)
        print('这是方法')


class A(Root):
    def __init__(self):
        super(A,self).__init__()
        print('实例化时执行')


test = A()  # 实例化类
test.fun()  # 调用方法
test.x  # 调用属性

结果输出如下

实例化时执行

这是属性

这是方法

此时A已经成功继承了父类的属性,所以super().__init__()的作用也就显而易见了,就是执行父类的构造函数,使得我们能够调用父类的属性。

上面是单继承情况,我们也会遇到多继承情况,用法类似,但是相比另一种Root.__init__(self),在继承时会跳过重复继承,节省了资源。

还有很多关于super的用法可以参考

super的使用

super() 在 python2、3中的区别

Python3.x 和 Python2.x 的一个区别: Python 3 可以使用直接使用 super().xxx 代替 super(Class, self).xxx :

python3直接写成 super().方法名(参数)

python2必须写成 super(父类,self).方法名(参数)

例:

python3: super().__init__()

python2: super(父类,self).__init__()

Python3.x 实例:

class A:
     def add(self, x):
         y = x+1
         print(y)
class B(A):
    def add(self, x):
        super().add(x)
b = B()
b.add(2)  # 3

Python2.x 实例:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
class A(object):   # Python2.x 记得继承 object
    def add(self, x):
         y = x+1
         print(y)
class B(A):
    def add(self, x):
        super(B, self).add(x)
b = B()
b.add(2)  # 3

总结

到此这篇关于Python中super().__init__()测试以及理解的文章就介绍到这了,更多相关Python super().__init__()测试内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python 生成器生成杨辉三角的方法(必看)
Apr 10 Python
Python之文字转图片方法
May 10 Python
Python对接六大主流数据库(只需三步)
Jul 31 Python
pandas factorize实现将字符串特征转化为数字特征
Dec 19 Python
Django之form组件自动校验数据实现
Jan 14 Python
解决django接口无法通过ip进行访问的问题
Mar 27 Python
Python Opencv中用compareHist函数进行直方图比较对比图片
Apr 07 Python
python使用nibabel和sitk读取保存nii.gz文件实例
Jul 01 Python
基于Django集成CAS实现流程详解
Nov 28 Python
PyCharm配置KBEngine快速处理代码提示冲突、配置命令问题
Apr 03 Python
关于Numpy之repeat、tile的用法总结
Jun 02 Python
Python读写yaml文件
Mar 20 Python
浅析Python中的随机采样和概率分布
Dec 06 #Python
python程序的组织结构详解
Python中异常处理用法
Nov 27 #Python
python中的3种定义类方法
Nov 27 #Python
5道关于python基础 while循环练习题
Nov 27 #Python
Python中的pprint模块
Nov 27 #Python
python 多态 协议 鸭子类型详解
Nov 27 #Python
You might like
再说下636单管机
2021/03/02 无线电
php开发过程中关于继承的使用方法分享
2011/06/17 PHP
php无限分类且支持输出树状图的详细介绍
2013/06/19 PHP
PHP批量修改文件名称的方法分析
2017/02/27 PHP
php合并数组并保留键值的实现方法
2018/03/12 PHP
Thinkphp5框架实现图片、音频和视频文件的上传功能详解
2019/08/27 PHP
浅谈laravel框架与thinkPHP框架的区别
2019/10/23 PHP
在js中单选框和复选框获取值的方式
2009/11/06 Javascript
JQuery的ajax获取数据后的处理总结(html,xml,json)
2010/07/14 Javascript
javascript学习笔记(四) Number 数字类型
2012/06/19 Javascript
JQuery选中checkbox方法代码实例(全选、反选、全不选)
2015/04/27 Javascript
jQuery中 prop() attr()使用详解
2015/05/19 Javascript
一些实用性较高的js方法
2016/04/19 Javascript
JS中如何实现点击a标签返回页面顶部的问题
2017/01/19 Javascript
jquery 禁止鼠标右键并监听右键事件
2017/04/27 jQuery
Angular中封装fancyBox(图片预览)遇到问题小结
2017/09/01 Javascript
Three.js中网格对象MESH的属性与方法详解
2017/09/27 Javascript
通过fastclick源码分析彻底解决tap“点透”
2017/12/24 Javascript
vue 动态绑定背景图片的方法
2018/08/10 Javascript
小程序实现列表点赞功能
2018/11/02 Javascript
如何为你的JS项目添加智能提示与类型检查详解
2019/03/12 Javascript
WebGL three.js学习笔记之阴影与实现物体的动画效果
2019/04/25 Javascript
[01:36:57]【09DOTA2第一视角】小骷髅
2014/04/16 DOTA
[01:46]TI4西雅图DOTA2前线报道 中国选手抱团调时差
2014/07/08 DOTA
[48:37]EG vs OG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python实现将目录中TXT合并成一个大TXT文件的方法
2015/07/15 Python
python plotly画柱状图代码实例
2019/12/13 Python
浅谈对pytroch中torch.autograd.backward的思考
2019/12/27 Python
html5实现图片转圈的动画效果——让页面动起来
2017/10/16 HTML / CSS
阿里云:Aliyun.com
2017/02/15 全球购物
巴西儿童时尚购物网站:Dinda
2019/08/14 全球购物
mysql有关权限的表都有哪几个
2015/04/22 面试题
跟单文员岗位职责
2014/01/03 职场文书
《真想变成大大的荷叶》教学反思
2014/04/14 职场文书
利用Python实现模拟登录知乎
2022/05/25 Python
Nginx静态压缩和代码压缩提高访问速度详解
2022/05/30 Servers