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操作时间和日期之asctime()方法的使用
May 22 Python
python实现八大排序算法(1)
Sep 14 Python
Python连接phoenix的方法示例
Sep 29 Python
Python进阶学习之特殊方法实例详析
Dec 01 Python
基于Python中numpy数组的合并实例讲解
Apr 04 Python
Python爬虫——爬取豆瓣电影Top250代码实例
Apr 17 Python
分享一个pycharm专业版安装的永久使用方法
Sep 24 Python
wxPython电子表格功能wx.grid实例教程
Nov 19 Python
Python小程序之在图片上加入数字的代码
Nov 26 Python
python GUI库图形界面开发之PyQt5输入对话框QInputDialog详细使用方法与实例
Feb 27 Python
学习python需要有编程基础吗
Jun 02 Python
Python中json.load()和json.loads()有哪些区别
Jun 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
php去掉URL网址中带有PHPSESSID的配置方法
2014/07/08 PHP
给WordPress的编辑后台添加提示框的代码实例分享
2015/12/25 PHP
Laravel实现autoload方法详解
2017/05/07 PHP
javascript 获取图片颜色
2009/04/05 Javascript
浅谈javascript的数据类型检测
2010/07/10 Javascript
jQuery代码实现发展历程时间轴特效
2015/07/30 Javascript
JS+CSS实现自动切换的网页滑动门菜单效果代码
2015/09/14 Javascript
Bootstrap Table从服务器加载数据进行显示的实现方法
2016/09/29 Javascript
JQueryEasyUI之DataGrid数据显示
2016/11/23 Javascript
Vue.js 单页面多路由区域操作的实例详解
2017/07/17 Javascript
node.js学习之事件模块Events的使用示例
2017/09/28 Javascript
seajs模块压缩问题与解决方法实例分析
2017/10/10 Javascript
微信小程序webview实现长按点击识别二维码功能示例
2019/01/24 Javascript
详解关于JSON.parse()和JSON.stringify()的性能小测试
2019/03/14 Javascript
layer弹出层扩展主题的方法
2019/09/11 Javascript
js+canvas绘制图形验证码
2020/09/21 Javascript
JavaScript实现消消乐的源代码
2021/01/12 Javascript
python的类变量和成员变量用法实例教程
2014/08/25 Python
python如何通过protobuf实现rpc
2016/03/06 Python
深入理解Python中装饰器的用法
2016/06/28 Python
基于Python的关键字监控及告警
2017/07/06 Python
tensorflow实现KNN识别MNIST
2018/03/12 Python
利用python和ffmpeg 批量将其他图片转换为.yuv格式的方法
2019/01/08 Python
Python3实现统计单词表中每个字母出现频率的方法示例
2019/01/28 Python
python 将字符串中的数字相加求和的实现
2019/07/18 Python
Pytoch之torchvision.transforms图像变换实例
2019/12/30 Python
keras分类之二分类实例(Cat and dog)
2020/07/09 Python
用HTML5制作烟火效果的教程
2015/05/12 HTML / CSS
毕业生个人求职的自我评价
2013/10/28 职场文书
小学国庆节活动方案策划书
2014/09/16 职场文书
2014年幼儿园班级工作总结
2014/12/17 职场文书
人民检察院起诉书
2015/05/20 职场文书
2015年中秋放假通知范文
2015/08/18 职场文书
2016年“我们的节日·重阳节”主题活动总结
2016/04/01 职场文书
基于Apache Hudi在Google云构建数据湖平台的思路详解
2022/04/07 Servers
Nginx+Tomcat负载均衡多实例详解
2022/04/11 Servers