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使用fileinput模块实现逐行读取文件的方法
Apr 29 Python
用Python编写生成树状结构的文件目录的脚本的教程
May 04 Python
在Python的Django框架中创建和使用模版
Jul 15 Python
numpy排序与集合运算用法示例
Dec 15 Python
python学生管理系统学习笔记
Mar 19 Python
pytorch 准备、训练和测试自己的图片数据的方法
Jan 10 Python
Python抓包程序mitmproxy安装和使用过程图解
Mar 02 Python
Python进程的通信Queue、Pipe实例分析
Mar 30 Python
深入浅析python 中的self和cls的区别
Jun 20 Python
Python改变对象的字符串显示的方法
Aug 01 Python
聊聊Python String型列表求最值的问题
Jan 18 Python
Python制作春联的示例代码
Jan 22 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
thinkphp5.1框架容器与依赖注入实例分析
2019/07/23 PHP
javascript:;与javascript:void(0)使用介绍
2013/06/05 Javascript
jquery数组之存放checkbox全选值示例代码
2013/12/20 Javascript
JavaScript 学习笔记之变量及其作用域
2015/01/14 Javascript
Bootstrap3下拉菜单的实现
2017/02/22 Javascript
微信小程序 wx.login解密出现乱码的问题解决办法
2017/03/10 Javascript
简单实现JavaScript弹幕效果
2020/08/27 Javascript
React-Native 组件之 Modal的使用详解
2017/08/08 Javascript
JS库之wow.js使用方法
2017/09/14 Javascript
在vue项目中引入highcharts图表的方法(详解)
2018/03/05 Javascript
vue-cli 默认路由再子路由选中下的选中状态问题及解决代码
2018/09/06 Javascript
Vue项目引进ElementUI组件的方法
2018/11/11 Javascript
vue实现鼠标移入移出事件代码实例
2019/03/27 Javascript
vant 中van-list的用法说明
2020/11/11 Javascript
[36:52]DOTA2真视界:基辅特锦赛总决赛
2017/05/21 DOTA
[01:05:07]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第一场2月1日
2021/03/11 DOTA
python采集博客中上传的QQ截图文件
2014/07/18 Python
python调用HEG工具批量处理MODIS数据的方法及注意事项
2020/02/18 Python
Selenium基于PIL实现拼接滚动截图
2020/04/10 Python
一篇文章教你用python画动态爱心表白
2020/11/22 Python
python爬虫分布式获取数据的实例方法
2020/11/26 Python
Python实现迪杰斯特拉算法并生成最短路径的示例代码
2020/12/01 Python
HTML5实现应用程序缓存(Application Cache)
2020/06/16 HTML / CSS
英国领先的鞋类零售商:Shoe Zone
2018/12/13 全球购物
this关键字的作用
2016/01/30 面试题
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
2014/07/27 面试题
银行实习人员自我鉴定
2013/09/22 职场文书
产品工艺师的岗位职责
2013/11/15 职场文书
毕业生自荐信
2013/12/14 职场文书
车辆年审委托书范本
2014/09/18 职场文书
乡镇遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
2015年房地产销售工作总结
2015/04/20 职场文书
2015年为民办实事工作总结
2015/05/26 职场文书
500字作文之周记
2019/12/13 职场文书
JS创建或填充任意长度数组的小技巧汇总
2021/10/24 Javascript
Java 超详细讲解数据结构中的堆的应用
2022/04/02 Java/Android