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实现子类调用父类的方法
Nov 10 Python
用Python展示动态规则法用以解决重叠子问题的示例
Apr 02 Python
Python导出数据到Excel可读取的CSV文件的方法
May 12 Python
python保存字符串到文件的方法
Jul 01 Python
浅谈python中scipy.misc.logsumexp函数的运用场景
Jun 23 Python
不可错过的十本Python好书
Jul 06 Python
Django 添加静态文件的两种实现方法(必看篇)
Jul 14 Python
Python 加密的实例详解
Oct 09 Python
在PyCharm中批量查找及替换的方法
Jan 20 Python
Django框架文件上传与自定义图片上传路径、上传文件名操作分析
May 10 Python
Python实现自动访问网页的例子
Feb 21 Python
Python连接mysql数据库及简单增删改查操作示例代码
Aug 03 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 HtmlReplace输入过滤安全函数
2010/07/03 PHP
php中强制下载文件的代码(解决了IE下中文文件名乱码问题)
2011/05/09 PHP
php获取微信共享收货地址的方法
2017/12/21 PHP
JavaScript 判断判断某个对象是Object还是一个Array
2010/01/28 Javascript
Uglifyjs(JS代码优化工具)入门 安装使用
2020/04/13 Javascript
window.location.reload()方法刷新页面弹出要再次显示该网页对话框
2013/04/24 Javascript
基于JavaScript实现通用tab选项卡(通用性强)
2016/01/07 Javascript
利用jQuery实现CheckBox全选/全不选/反选的简单代码
2016/05/31 Javascript
移动端刮刮乐的实现方式(js+HTML5)
2017/03/23 Javascript
JSON对象转化为字符串详解
2017/08/11 Javascript
angular中ui calendar的一些使用心得(推荐)
2017/11/03 Javascript
gulp构建小程序的方法步骤
2019/05/31 Javascript
node命令行工具之实现项目工程自动初始化的标准流程
2019/08/12 Javascript
Layui表格行工具事件与数据回填方法
2019/09/13 Javascript
vue实现element表格里表头信息提示功能(推荐)
2019/11/20 Javascript
小程序api实现promise封装过程解析
2019/11/21 Javascript
[02:02]2018DOTA2亚洲邀请赛Mineski赛前采访
2018/04/04 DOTA
Django中的CBV和FBV示例介绍
2018/02/25 Python
matplotlib subplots 设置总图的标题方法
2018/05/25 Python
Python定义函数功能与用法实例详解
2019/04/08 Python
python腾讯语音合成实现过程解析
2019/08/01 Python
python lambda表达式(匿名函数)写法解析
2019/09/16 Python
django rest framework 过滤时间操作
2020/07/12 Python
MATLAB数学建模之画图汇总
2020/07/16 Python
10张动图学会python循环与递归问题
2021/02/06 Python
HTML5: Web 标准最巨大的飞跃
2008/10/17 HTML / CSS
Clarins娇韵诗英国官网:来自法国的天然护肤品牌
2017/04/18 全球购物
英国时尚女装购物网站:Missguided
2018/08/23 全球购物
伯克斯奥特莱斯:Burkes Outlet
2019/03/30 全球购物
艺术应用与设计专业个人的自我评价
2013/11/19 职场文书
公司部门司机岗位职责
2014/01/03 职场文书
电脑专业个人求职信范文
2014/02/04 职场文书
会计求职信
2014/05/29 职场文书
毕业生代领毕业材料的授权委托书
2014/09/29 职场文书
2016年党校科级干部培训班学习心得体会
2016/01/06 职场文书
Go语言入门exec的基本使用
2022/05/20 Golang