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的Django框架实现事务交易管理的教程
Apr 20 Python
Python中的pass语句使用方法讲解
May 14 Python
Python3读取zip文件信息的方法
May 22 Python
RC4文件加密的python实现方法
Jun 30 Python
用Python写冒泡排序代码
Apr 12 Python
Python循环语句中else的用法总结
Sep 11 Python
Python遍历numpy数组的实例
Apr 04 Python
python3+PyQt5重新实现QT事件处理程序
Apr 19 Python
Python如何爬取实时变化的WebSocket数据的方法
Mar 09 Python
python networkx 根据图的权重画图实现
Jul 10 Python
基于梯度爆炸的解决方法:clip gradient
Feb 04 Python
Python初识逻辑与if语句及用法大全
Aug 07 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
BBS(php &amp; mysql)完整版(五)
2006/10/09 PHP
详解HTTP Cookie状态管理机制
2016/01/14 PHP
PHP安装GeoIP扩展根据IP获取地理位置及计算距离的方法
2016/07/01 PHP
PHP+Apache+Mysql环境搭建教程
2016/08/01 PHP
php使用str_shuffle()函数生成随机字符串的方法分析
2017/02/17 PHP
浅谈关于PHP解决图片无损压缩的问题
2017/09/01 PHP
Jquery 数据选择插件Pickerbox使用介绍
2012/08/24 Javascript
jquery插件validate验证的小例子
2013/05/08 Javascript
javascript仿php的print_r函数输出json数据
2013/09/13 Javascript
jQuery学习笔记之2个小技巧
2015/01/19 Javascript
jquery中validate与form插件提交的方式小结
2016/03/26 Javascript
Bootstrap教程JS插件滚动监听学习笔记分享
2016/05/18 Javascript
jQuery插件扩展操作入门示例
2017/01/16 Javascript
JavaScript实现前端实时搜索功能
2020/03/26 Javascript
js禁止浏览器的回退事件
2017/04/20 Javascript
jQuery实现的页面遮罩层功能示例【测试可用】
2017/10/14 jQuery
如何通过setTimeout理解JS运行机制详解
2019/03/23 Javascript
vue history 模式打包部署在域名的二级目录的配置指南
2019/07/02 Javascript
python实现感知器算法详解
2017/12/19 Python
python matplotlib绘图,修改坐标轴刻度为文字的实例
2018/05/25 Python
用Python将结果保存为xlsx的方法
2019/01/28 Python
python re.sub()替换正则的匹配内容方法
2019/07/22 Python
python从zip中删除指定后缀文件(推荐)
2019/12/05 Python
Python warning警告出现的原因及忽略方法
2020/01/31 Python
Python Tkinter Entry和Text的添加与使用详解
2020/03/04 Python
Django操作session 的方法
2020/03/09 Python
Python数组拼接np.concatenate实现过程
2020/04/18 Python
Python  Asyncio模块实现的生产消费者模型的方法
2021/03/01 Python
七一党建活动方案
2014/01/28 职场文书
党员自我评议个人对照检查材料
2014/09/16 职场文书
2014年政工师工作总结
2014/12/18 职场文书
2015年度信用社工作总结
2015/05/04 职场文书
学校社团活动总结
2015/05/07 职场文书
领导新年致辞2016
2015/07/29 职场文书
大学宣传委员竞选稿
2015/11/19 职场文书
创业计划书之校园跑腿公司
2019/09/24 职场文书