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实现登陆知乎获得个人收藏并保存为word文件
Mar 16 Python
Python的Scrapy爬虫框架简单学习笔记
Jan 20 Python
python 性能提升的几种方法
Jul 15 Python
python中 chr unichr ord函数的实例详解
Aug 06 Python
Python 3.7新功能之dataclass装饰器详解
Apr 21 Python
python读取文本绘制动态速度曲线
Jun 21 Python
Python实现多线程的两种方式分析
Aug 29 Python
python实现浪漫的烟花秀
Jan 30 Python
python跳出双层for循环的解决方法
Jun 24 Python
利用Python实现Shp格式向GeoJSON的转换方法
Jul 09 Python
如何在python中写hive脚本
Nov 08 Python
Python批量启动多线程代码实例
Feb 18 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
编写安全 PHP应用程序的七个习惯深入分析
2013/06/08 PHP
PHP图像处理之imagecreate、imagedestroy函数介绍
2014/11/19 PHP
PHP实现简单搜歌的方法
2015/07/28 PHP
Yii2.0高级框架数据库增删改查的一些操作
2015/11/16 PHP
PHP下载远程图片的几种方法总结
2017/04/07 PHP
PHP getDocNamespaces()函数讲解
2019/02/03 PHP
PHP超低内存遍历目录文件和读取超大文件的方法
2019/05/01 PHP
Swoole4.4协程抢占式调度器详解
2019/05/23 PHP
JS获取鼠标坐标的实例方法
2013/07/18 Javascript
纯css+js写的一个简单的tab标签页带样式
2014/01/28 Javascript
javascript执行环境及作用域详解
2016/05/05 Javascript
关于在vue-cli中使用微信自动登录和分享的实例
2017/06/22 Javascript
JS 学习总结之正则表达式的懒惰性和贪婪性
2017/07/03 Javascript
centos 上快速搭建ghost博客方法分享
2018/05/23 Javascript
JS绘图Flot如何实现动态可刷新曲线图
2020/10/16 Javascript
Python 的 Socket 编程
2015/03/24 Python
Python科学计算之NumPy入门教程
2017/01/15 Python
微信跳一跳python自动代码解读1.0
2018/01/12 Python
详解Python 函数如何重载?
2019/04/23 Python
Python3批量移动指定文件到指定文件夹方法示例
2019/09/02 Python
Python和Sublime整合过程图示
2019/12/25 Python
Python和Bash结合在一起的方法
2020/11/13 Python
AmazeUI框架搭建的方法步骤(图文)
2020/08/17 HTML / CSS
安纳塔拉酒店度假村及水疗官方网站:Anantara Hotel
2016/08/25 全球购物
文明餐桌行动实施方案
2014/02/19 职场文书
体育比赛口号
2014/06/09 职场文书
2014年服务员个人工作总结
2014/12/23 职场文书
小学生通知书评语
2014/12/31 职场文书
承诺书范本
2015/01/21 职场文书
学习与创新自我评价
2015/03/09 职场文书
企业法人代表证明书
2015/06/18 职场文书
小学2016年“我们的节日·重阳节”活动总结
2016/04/01 职场文书
CSS3新特性详解(五):多列columns column-count和flex布局
2021/04/30 HTML / CSS
一小时学会TensorFlow2之基本操作2实例代码
2021/09/04 Python
「租借女友」第2季樱泽墨角色PV&新视觉图公开
2022/03/21 日漫
Python使用永中文档转换服务
2022/05/06 Python