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中除法使用的注意事项
Aug 21 Python
在Python中调用ggplot的三种方法
Apr 08 Python
Python绑定方法与非绑定方法详解
Aug 18 Python
解决tensorflow测试模型时NotFoundError错误的问题
Jul 27 Python
详解python实现识别手写MNIST数字集的程序
Aug 03 Python
python 地图经纬度转换、纠偏的实例代码
Aug 06 Python
Selenium chrome配置代理Python版的方法
Nov 29 Python
在Python IDLE 下调用anaconda中的库教程
Mar 09 Python
Python内存映射文件读写方式
Apr 24 Python
Windows 平台做 Python 开发的最佳组合(推荐)
Jul 27 Python
基于python实现操作git过程代码解析
Jul 27 Python
PyMongo 查询数据的实现
Jun 28 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下载远程文件类(支持断点续传)
2008/11/14 PHP
DW中链接mysql数据库时,建立字符集中文出现乱码的解决方法
2010/03/27 PHP
php笔记之:文章中图片处理的使用
2013/04/26 PHP
PHP检查网站是否宕机的方法示例
2017/07/24 PHP
jQuery使用手册之一
2007/03/24 Javascript
javascript 计算两个整数的百分比值
2009/12/26 Javascript
深入分析js中的constructor和prototype
2012/04/07 Javascript
Extjs Gird 支持中文拼音排序实现代码
2013/04/15 Javascript
JavaScript中prototype为对象添加属性的误区介绍
2013/10/15 Javascript
js 弹出框只弹一次(二次修改之后的)
2013/11/26 Javascript
基于Jquery和html5的7款个性化地图插件
2015/11/17 Javascript
JS简单获取客户端IP地址的方法【调用搜狐接口】
2016/09/05 Javascript
Bootstrap源码解读表单(2)
2016/12/22 Javascript
Vue-Access-Control 前端用户权限控制解决方案
2017/12/01 Javascript
JS实现在文本指定位置插入内容的简单示例
2017/12/22 Javascript
Python实现微信公众平台自定义菜单实例
2015/03/20 Python
python3使用SMTP发送HTML格式邮件
2018/06/19 Python
python3.6使用tkinter实现弹跳小球游戏
2019/05/09 Python
Python 写入训练日志文件并控制台输出解析
2019/08/13 Python
Python 动态导入对象,importlib.import_module()的使用方法
2019/08/28 Python
Python 数据分析之逐块读取文本的实现
2020/12/14 Python
一文读懂python Scrapy爬虫框架
2021/02/24 Python
HTML5 在canvas中绘制文本附效果图
2014/06/23 HTML / CSS
HTML5 HTMLCollection和NodeList的区别详解
2020/04/29 HTML / CSS
在线学习西班牙语、法语或其他语言:Babbel.com
2018/02/07 全球购物
意大利高端时尚买手店:Stefania Mode
2018/03/01 全球购物
社区志愿者心得体会
2014/01/03 职场文书
战略性融资合作协议书范本
2014/10/17 职场文书
2015年药店店长工作总结
2015/04/29 职场文书
2015年暑期社会实践方案
2015/07/14 职场文书
新学期小学班主任工作计划
2019/06/21 职场文书
详解Java实践之适配器模式
2021/06/18 Java/Android
MySQL 开窗函数
2022/02/15 MySQL
各种货币符号快捷输入
2022/02/17 杂记
把77A收信机改造成收音机
2022/04/05 无线电
MySQL慢查询中的commit慢和binlog中慢事务的区别
2022/06/16 MySQL