Python中super的用法
uper 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。总之前人留下的经验就是:保持一致性。要不全部用类名调用父类,要不就全部用 super,不要一半一半。
普通继承
『代码』
- class FooParent(object):
- def __init__(self):
- self.parent = 'I\'m the parent.'
- print 'Parent'
- def bar(self,message):
- print message, 'from Parent'
- class FooChild(FooParent):
- def __init__(self):
- FooParent.__init__(self)
- print 'Child'
- def bar(self,message):
- FooParent.bar(self,message)
- print 'Child bar function.'
- print self.parent
- if __name__=='__main__':
- fooChild = FooChild()
- fooChild.bar('HelloWorld')
super继承
『代码』
- class FooParent(object):
- def __init__(self):
- self.parent = 'I\'m the parent.'
- print 'Parent'
- def bar(self,message):
- print message,'from Parent'
- class FooChild(FooParent):
- def __init__(self):
- super(FooChild,self).__init__()
- print 'Child'
- def bar(self,message):
- super(FooChild, self).bar(message)
- print 'Child bar fuction'
- print self.parent
- if __name__ == '__main__':
- fooChild = FooChild()
- fooChild.bar('HelloWorld')
程序运行结果相同,为:
Parent
Child
HelloWorld from Parent
Child bar fuction
I'm the parent.
从运行结果上看,普通继承和super继承是一样的。但是其实它们的内部运行机制不一样,这一点在多重继承时体现得很明显。在super机制里可以保证公共父类仅被执行一次,至于执行的顺序,是按照mro进行的(E.__mro__)。
注意super继承只能用于新式类,用于经典类时就会报错。
新式类:必须有继承的类,如果没什么想继承的,那就继承object
经典类:没有父类,如果此时调用super就会出现错误:『super() argument 1 must be type, not classobj』
Python中super的用法相关推荐
- python中super的用法实例解析
概念 super作为python的内建函数.主要作用如下: 允许我们避免使用基类 跟随多重继承来使用 实例 在单个继承的场景下,一般使用super来调用基类来实现: 下面是一个例子: class Ma ...
- python中的super用法详解_Python中super函数用法实例分析
本文实例讲述了python中super函数用法.分享给大家供大家参考,具体如下: 这是个高大上的函数,在python装13手册里面介绍过多使用可显得自己是高手 23333. 但其实他还是很重要的. 简 ...
- 【python】类继承中super的用法
阅读本文,需要知道python中的类与继承的概念. 1.总述 在python中,通过类的继承机制,可以实现在子类中调用父类的方法,从而避免写重复的代码.但在面临多继承时,如果多个父类中都实现了某个相同 ...
- python中with是什么意思,Python中With的用法
在看Dive Into Python中有关描述文件读写那章节的时候,看到了有关with的用法,查阅下相关资料,记录下来,以备后用. 官方的reference上有关with statement是这样说的 ...
- 五分钟理解yield在python中的简单用法,让你不再迷惑
很多同学无论是在学习python还是使用python的过程中,都会遇到yield关键字,这个让人头大的问题,今天,就给大家分享一下我自学yield的心路历程 基本概念: (1)在 Python 中,使 ...
- format函数python的顺序_[转载] Python中format函数用法
Python中format函数用法 format优点 format是python2.6新增的格式化字符串的方法,相对于老版的%格式方法,它有很多优点. 1.不需要理会数据类型的问题,在%方法中%s只能 ...
- python代码大全表解释-python中的字典用法大全的代码
如下代码是关于python中的字典用法大全的代码. #!/usr/bin/env python # # [SNIPPET_NAME: Dictionaries 101] # [SNIPPET_CATE ...
- python教程实例-Python中函数的用法实例教程
本文以数值计算为例讲述了Python中函数的用法,分享给大家供大家参考借鉴之用.具体如下: 我们都知道圆的面积计算公式为: S = πr2 当我们知道半径r的值时,就可以根据公式计算出面积.假设我们需 ...
- 详解python中的用法_详解python中*号的用法
1.表示乘号 2.表示倍数,例如: def T(msg,time=1): print((msg+' ')*time) T('hi',3) 打印结果(打印3次): hi hi hi 3.单个 * (1) ...
最新文章
- 单调队列多重背包时间复杂度O(vn)
- 面试题整理9 连续子数组的最大和
- 分库、分表、分区的区别,傻傻分不清?
- 【Linux】一步一步学Linux——as命令(260)
- TopN算法与排行榜
- 【2017年第1期】大数据能力开放平台创新和发展
- 冲刺阶段 day 4
- java遍历字符串_Java后端开发算法基础面试题分享,你离大厂也许就差这份面试题
- DockOne微信分享(一一零):Docker在沪江落地的实践
- 入门选手都能了解的聚类算法之二(DBSCAN)
- tp5 mysql 使用ignore_tp5数据库配置操作
- 邮箱服务器输入密码,Foxmail的设置方法?
- 使用原生JavaScript改变DOM元素面试题
- laravel学习1.0
- 实验名称:华为基本ACL 2000配置
- 使用docsify搭建在线文档中心
- 计算机中信息的表示与存储教案,计算机基础教案2--1.2信息的表示与存储.doc
- 检查版本更新,跳转到腾讯应用宝进行下载
- 广告公司不会被MCN干掉,但会被打残
- HDX工作模式SECS协议工业低频RFID读写器|读卡器CK-S610-SE硬件接线方法与选择
热门文章
- 性能优化(7):教你正确使用css选择器
- html中添加背景音乐的标签,添加背景音乐的html标签是什么
- geetest php,Laravel 集成 Geetest验证码的方法php实例
- OpenCV中的模板匹配
- 监督学习 | 非线性回归 之多项式回归原理及Sklearn实现
- 二分法采用五五分平均复杂度最小(相比四六分或三七分等)的定量证明方法
- P5703 【深基2.例5】苹果采购(python3实现)--2022.01.29
- Java工作笔记-类型转换的一种思路(前后端分离、反射)
- Java笔记-获取当前时间及对当前时间进行加减及时间对比
- Java笔记-编码方式创建kaptcha验证码