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读文件逐行处理的示例代码分享
Dec 27 Python
python matplotlib画图实例代码分享
Dec 27 Python
Python wxpython模块响应鼠标拖动事件操作示例
Aug 23 Python
利用Python实现原创工具的Logo与Help
Dec 03 Python
python字符串分割及字符串的一些常规方法
Jul 24 Python
jupyter 使用Pillow包显示图像时inline显示方式
Apr 24 Python
增大python字体的方法步骤
Jul 05 Python
python Matplotlib数据可视化(1):简单入门
Sep 30 Python
利用python爬取有道词典的方法
Dec 08 Python
Python 实现定积分与二重定积分的操作
May 26 Python
Python并发编程实例教程之线程的玩法
Jun 20 Python
Python+DeOldify实现老照片上色功能
Jun 21 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
PHP错误和异长常处理总结
2014/03/06 PHP
微信公众平台开发关注及取消关注事件的方法
2014/12/23 PHP
PHP实现的注册,登录及查询用户资料功能API接口示例
2017/06/06 PHP
PHP实现提高SESSION响应速度的几种方法详解
2019/08/09 PHP
php实现登录页面的简单实例
2019/09/29 PHP
jquery 获取json数据实现代码
2009/04/27 Javascript
JQuery自定义事件的应用 JQuery最佳实践
2010/08/01 Javascript
Node.js中使用mongoskin操作mongoDB实例
2014/09/28 Javascript
jQuery实现根据滚动条位置加载相应内容功能
2016/07/18 Javascript
vue-router单页面路由
2017/06/17 Javascript
微信小程序自动客服功能
2017/11/02 Javascript
vue.js轮播图组件使用方法详解
2018/07/03 Javascript
vue使用监听实现全选反选功能
2018/07/06 Javascript
详解swiper在vue中的应用(以3.0为例)
2018/09/20 Javascript
layui实现二维码弹窗、并下载到本地的方法
2019/09/25 Javascript
JS对日期操作封装代码实例
2019/11/08 Javascript
jQuery实现简易QQ聊天框
2020/02/10 jQuery
Angular之jwt令牌身份验证的实现
2020/02/14 Javascript
非常漂亮的js烟花效果
2020/03/10 Javascript
详解JSON.stringify()的5个秘密特性
2020/05/26 Javascript
Python3.6正式版新特性预览
2016/12/15 Python
浅谈Python使用Bottle来提供一个简单的web服务
2017/12/27 Python
Windows上使用Python增加或删除权限的方法
2018/04/24 Python
Python之dict(或对象)与json之间的互相转化实例
2018/06/05 Python
python设置值及NaN值处理方法
2018/07/03 Python
PyQT5 QTableView显示绑定数据的实例详解
2019/06/25 Python
python3.6编写的单元测试示例
2019/08/17 Python
python  ceiling divide 除法向上取整(或小数向上取整)的实例
2019/12/27 Python
Python实现对adb命令封装
2020/03/06 Python
给ubuntu18安装python3.7的详细教程
2020/06/08 Python
python 进程池pool使用详解
2020/10/15 Python
前端制作动画的几种方式(css3,js)
2016/12/12 HTML / CSS
html5 Canvas画图教程(8)—canvas里画曲线之bezierCurveTo方法
2013/01/09 HTML / CSS
读书之星事迹材料
2014/05/12 职场文书
Python爬虫入门案例之爬取二手房源数据
2021/10/16 Python
JavaScript 与 TypeScript之间的联系
2021/11/27 Javascript