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中的格式化输出用法总结
Jul 28 Python
python 提取tuple类型值中json格式的key值方法
Dec 31 Python
Python缓存技术实现过程详解
Sep 25 Python
基于Python批量生成指定尺寸缩略图代码实例
Nov 20 Python
基于python读取.mat文件并取出信息
Dec 16 Python
如何基于Python + requests实现发送HTTP请求
Jan 13 Python
浅析python表达式4+0.5值的数据类型
Feb 26 Python
python用opencv完成图像分割并进行目标物的提取
May 25 Python
python属于解释型语言么
Jun 15 Python
Python selenium如何打包静态网页并下载
Aug 12 Python
详解numpy.ndarray.reshape()函数的参数问题
Oct 13 Python
selenium+超级鹰实现模拟登录12306
Jan 24 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
thinkphp框架下实现登录、注册、找回密码功能
2016/04/06 PHP
js模拟实现Array的sort方法
2007/12/11 Javascript
Js中setTimeout()和setInterval() 何时被调用执行的用法
2013/04/12 Javascript
javascript:void(0)是什么意思示例介绍
2013/11/17 Javascript
跟我学习javascript的隐式强制转换
2015/11/16 Javascript
通过点击jqgrid表格弹出需要的表格数据
2015/12/02 Javascript
jQuery事件对象总结
2016/10/17 Javascript
jQuery Validate 校验多个相同name的方法
2017/05/18 jQuery
AngularJS实现单一页面内设置跳转路由的方法
2017/06/28 Javascript
微信小程序 获取session_key和openid的实例
2017/08/17 Javascript
JS常用的几种数组遍历方式以及性能分析对比实例详解
2018/04/11 Javascript
使用vue的transition完成滑动过渡的示例代码
2018/06/25 Javascript
解决Vue.js由于延时显示了{{message}}引用界面的问题
2018/08/25 Javascript
微信小程序按钮去除边框线分享页面功能
2018/08/27 Javascript
在angularJs中进行数据遍历的2种方法
2018/10/08 Javascript
jQuery实现弹出层效果
2019/12/10 jQuery
Vue实现星级评价效果实例详解
2019/12/30 Javascript
微信小程序:报错(in promise) MiniProgramError
2020/10/30 Javascript
JS实现选项卡插件的两种写法(jQuery和class)
2020/12/30 jQuery
Python实现Dijkstra算法
2018/10/17 Python
Python实现的矩阵转置与矩阵相乘运算示例
2019/03/26 Python
使用python判断jpeg图片的完整性实例
2019/06/10 Python
对python中基于tcp协议的通信(数据传输)实例讲解
2019/07/22 Python
python求质数列表的例子
2019/11/24 Python
python中count函数简单用法
2020/01/05 Python
keras 特征图可视化实例(中间层)
2020/01/24 Python
解决Tensorboard可视化错误:不显示数据 No scalar data was found
2020/02/15 Python
python中time包实例详解
2021/02/02 Python
解决pytorch下出现multi-target not supported at的一种可能原因
2021/02/06 Python
意大利在线药房:Farmacia Loreto Gallo
2019/08/09 全球购物
澳大利亚在线购买葡萄酒:The Wine Collective
2020/02/20 全球购物
限量版运动鞋和街头服饰:TheDrop
2020/09/06 全球购物
员工拾金不昧表扬信
2014/01/09 职场文书
宿舍使用违章电器检讨书
2014/01/12 职场文书
家长意见和建议怎么写
2015/06/04 职场文书
pytorch fine-tune 预训练的模型操作
2021/06/03 Python