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和Ruby中each循环引用变量问题(一个隐秘BUG?)
Jun 04 Python
python类和函数中使用静态变量的方法
May 09 Python
基于python的selenium两种文件上传操作实现详解
Sep 19 Python
python修改文件内容的3种方法详解
Nov 15 Python
python多线程使用方法实例详解
Dec 30 Python
基于Python实现2种反转链表方法代码实例
Jul 06 Python
python实现将中文日期转换为数字日期
Jul 14 Python
Python使用pickle进行序列化和反序列化的示例代码
Sep 22 Python
python 匿名函数与三元运算学习笔记
Oct 23 Python
Python并发爬虫常用实现方法解析
Nov 19 Python
pandas将list数据拆分成行或列的实现
Dec 13 Python
Python中的 No Module named ***问题及解决
Jul 23 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
MySQL数据库转移,access,sql server 转 MySQL 的图文教程
2007/09/02 PHP
PHP 正则判断中文UTF-8或GBK的思路及具体实现
2013/11/26 PHP
destoon调用discuz论坛中带图片帖子的实现方法
2014/08/21 PHP
PHP的mysqli_select_db()函数讲解
2019/01/23 PHP
php array_map()函数实例用法
2021/03/03 PHP
基于Jquery的$.cookie()实现跨越页面tabs导航实现代码
2011/03/03 Javascript
js中scrollHeight,scrollWidth,scrollLeft,scrolltop等差别介绍
2012/05/16 Javascript
用jQuery实现一些导航条切换,显示隐藏的实例代码
2013/06/08 Javascript
form表单只提交数据而不进行页面跳转的解决方案
2013/09/18 Javascript
jQuery读取和设定KindEditor值的方法
2013/11/22 Javascript
JavaScript使用HTML5的window.postMessage实现跨域通信例子
2014/04/11 Javascript
防止登录页面出现在frame中js代码
2014/07/22 Javascript
TinyMCE汉化及本地上传图片功能实例详解
2016/05/31 Javascript
jquery轮播的实现方式 附完整实例
2016/07/28 Javascript
购物车前端开发(jQuery和bootstrap3)
2016/08/27 Javascript
Bootstrap模态框禁用空白处点击关闭
2016/10/20 Javascript
socket.io学习教程之基本应用(二)
2017/04/29 Javascript
javascript实现二叉树的代码
2017/06/08 Javascript
谈谈vue中mixin的一点理解
2017/12/12 Javascript
nodejs读取本地中文json文件出现乱码解决方法
2018/10/10 NodeJs
Vue+ElementUI使用vue-pdf实现预览功能
2019/11/26 Javascript
JavaScript装箱及拆箱boxing及unBoxing用法解析
2020/06/15 Javascript
简单谈谈offsetleft、offsetTop和offsetParent
2020/12/04 Javascript
python计算最小优先级队列代码分享
2013/12/18 Python
python采用requests库模拟登录和抓取数据的简单示例
2014/07/05 Python
基于Python 装饰器装饰类中的方法实例
2018/04/21 Python
解析Python3中的Import
2019/10/13 Python
python 实现ping测试延迟的两种方法
2020/12/10 Python
美国眼镜网站:LensCrafters
2020/01/19 全球购物
中国京东和泰国中央集团合资的网站:JD CENTRAL
2020/08/22 全球购物
VC++笔试题
2014/10/13 面试题
RIP版本1跟版本2的区别
2013/12/30 面试题
行政办公员自我评价分享
2013/12/14 职场文书
Nginx反向代理至go-fastdfs案例讲解
2021/08/02 Servers
SpringBoot中HttpSessionListener的简单使用方式
2022/03/17 Java/Android
MySQL数据管理操作示例讲解
2022/12/24 MySQL