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程序设计入门(4)模块和包
Jun 16 Python
Python的函数的一些高阶特性
Apr 27 Python
Python实现模拟时钟代码推荐
Nov 08 Python
python3中dict(字典)的使用方法示例
Mar 22 Python
python3爬虫之设计签名小程序
Jun 19 Python
详解Python 多线程 Timer定时器/延迟执行、Event事件
Jun 27 Python
pandas 对日期类型数据的处理方法详解
Aug 08 Python
python文件操作的简单方法总结
Nov 07 Python
python学生信息管理系统实现代码
Dec 17 Python
检测tensorflow是否使用gpu进行计算的方式
Feb 03 Python
使用卷积神经网络(CNN)做人脸识别的示例代码
Mar 27 Python
python标准库ElementTree处理xml
May 20 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
检测png图片是否完整的php代码
2010/09/06 PHP
php使用smtp发送支持附件的邮件示例
2014/04/13 PHP
在PHP程序中使用Rust扩展的方法
2015/07/03 PHP
Joomla实现组件中弹出一个模式(modal)窗口的方法
2016/05/04 PHP
新增加的内容是如何将div的scrollbar自动移动最下面
2014/01/02 Javascript
Javascript 读取操作Sql中的Xml字段
2014/10/09 Javascript
jQuery之DOM对象和jQuery对象的转换与区别分析
2015/01/08 Javascript
JavaScript实现列表分页功能特效
2015/05/15 Javascript
详解AngularJS中的表达式使用
2015/06/16 Javascript
Angularjs整合微信UI(weui)
2016/03/15 Javascript
CKEditor无法验证的解决方案(js验证+jQuery Validate验证)
2016/05/09 Javascript
20分钟轻松创建自己的Bootstrap站点
2016/05/12 Javascript
bootstrap table实现双击可编辑、添加、删除行功能
2017/09/27 Javascript
vue-router路由懒加载和权限控制详解
2017/12/13 Javascript
基于JS实现带动画效果的流程进度条
2018/06/01 Javascript
NodeJS搭建HTTP服务器的实现步骤
2018/10/12 NodeJs
jQuery实现上下滚动公告栏详细代码
2018/11/21 jQuery
vue 基于element-ui 分页组件封装的实例代码
2018/12/10 Javascript
原生js实现公告滚动效果
2021/01/10 Javascript
微信小程序自定义弹出层效果
2020/05/26 Javascript
通过实例解析jQ Ajax操作相关原理
2020/09/23 Javascript
解决antd 表单设置默认值initialValue后验证失效的问题
2020/11/02 Javascript
[01:02:48]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 LGD vs OG
2018/04/02 DOTA
Python2.5/2.6实用教程 入门基础篇
2009/11/29 Python
python 出现SyntaxError: non-keyword arg after keyword arg错误解决办法
2017/02/14 Python
英国Amara家居法国网站:家居装饰,现代装饰和豪华礼品
2016/12/15 全球购物
TUMI新加坡官网:国际领先的商旅箱包品牌
2019/01/12 全球购物
企业演讲稿范文
2013/12/28 职场文书
晚会闭幕词
2015/01/28 职场文书
2015年党员公开承诺事项
2015/04/27 职场文书
教师远程培训心得体会
2016/01/09 职场文书
九年级化学教学反思
2016/02/22 职场文书
读《方与圆》有感:交友方圆有度
2020/01/14 职场文书
Python实现归一化算法详情
2022/03/18 Python
mysql使用instr达到in(字符串)的效果
2022/04/03 MySQL
CSS实现背景图片全屏铺满自适应的3种方式
2022/07/07 HTML / CSS