Python中super的用法实例


Posted in Python onMay 28, 2015

super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(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』

关于super用法的详细研究可参考「https://3water.com/article/66912.htm」

Python 相关文章推荐
Python文件操作类操作实例详解
Jul 11 Python
Python实现简单字典树的方法
Apr 29 Python
pandas数据框,统计某列数据对应的个数方法
Apr 11 Python
Python 查找list中的某个元素的所有的下标方法
Jun 27 Python
Python使用到第三方库PyMuPDF图片与pdf相互转换
May 03 Python
Python实现一个带权无回置随机抽选函数的方法
Jul 24 Python
python实现while循环打印星星的四种形状
Nov 23 Python
python lambda函数及三个常用的高阶函数
Feb 05 Python
Python响应对象text属性乱码解决方案
Mar 31 Python
详解python polyscope库的安装和例程
Nov 13 Python
Python 数据可视化神器Pyecharts绘制图像练习
Feb 28 Python
Python 文字识别
May 11 Python
Python中的super用法详解
May 28 #Python
Python读写ini文件的方法
May 28 #Python
Python实现给文件添加内容及得到文件信息的方法
May 28 #Python
Python功能键的读取方法
May 28 #Python
python实现将文本转换成语音的方法
May 28 #Python
Python 26进制计算实现方法
May 28 #Python
Python中super关键字用法实例分析
May 28 #Python
You might like
apache和php之间协同工作的配置经验分享
2013/04/08 PHP
PHP中exec函数和shell_exec函数的区别
2014/08/20 PHP
php中ltrim()、rtrim()与trim()删除字符空格实例
2014/11/25 PHP
php获取汉字拼音首字母的方法
2015/10/21 PHP
关于扩展 Laravel 默认 Session 中间件导致的 Session 写入失效问题分析
2016/01/08 PHP
thinkPHP框架整合tcpdf插件操作示例
2018/08/07 PHP
JQuery 风格的HTML文本转义
2009/07/01 Javascript
Mootools 1.2教程 Tooltips
2009/09/15 Javascript
JavaScript中的null和undefined解析
2012/04/14 Javascript
javascript控制swfObject应用介绍
2012/11/29 Javascript
js判断输入是否为数字的具体实例
2013/08/03 Javascript
深入理解Javascript动态方法调用与参数修改的问题
2013/12/10 Javascript
常用jQuery代码分享
2015/07/14 Javascript
使用JavaScript实现弹出层效果的简单实例
2016/05/31 Javascript
使用JQuery中的trim()方法去掉前后空格
2016/09/16 Javascript
js replace()去除代码中空格的实例
2017/02/14 Javascript
深入讲解xhr(XMLHttpRequest)/jsonp请求之abort
2017/07/26 Javascript
JS实现面向对象继承的5种方式分析
2018/07/21 Javascript
vue 中滚动条始终定位在底部的方法
2018/09/03 Javascript
JS遍历JSON数组及获取JSON数组长度操作示例【测试可用】
2018/12/12 Javascript
python超简单解决约瑟夫环问题
2015/05/12 Python
python使用clear方法清除字典内全部数据实例
2015/07/11 Python
python 文件查找及内容匹配方法
2018/10/25 Python
浅谈python写入大量文件的问题
2018/11/09 Python
django admin后台添加导出excel功能示例代码
2019/05/15 Python
np.newaxis 实现为 numpy.ndarray(多维数组)增加一个轴
2019/11/30 Python
香港礼品网站:GiftU eshop
2017/09/01 全球购物
allbeauty美国:英国在线美容店
2019/03/11 全球购物
护理自我鉴定范文
2013/10/06 职场文书
办理居住证介绍信
2014/01/15 职场文书
运动会入场词60字
2014/02/15 职场文书
纪检干部现实表现材料
2014/08/21 职场文书
单位考核聘任报告
2015/03/02 职场文书
民事起诉书范本
2015/05/19 职场文书
2015年普法依法治理工作总结
2015/05/26 职场文书
python之PySide2安装使用及QT Designer UI设计案例教程
2021/07/26 Python