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实现面向对像的ASP程序实例
Nov 10 Python
python中for语句简单遍历数据的方法
May 07 Python
Python中文分词工具之结巴分词用法实例总结【经典案例】
Apr 15 Python
正确理解python中的关键字“with”与上下文管理器
Apr 21 Python
基于使用paramiko执行远程linux主机命令(详解)
Oct 16 Python
python3中获取文件当前绝对路径的两种方法
Apr 26 Python
解决Shell执行python文件,传参空格引起的问题
Oct 30 Python
python 实现一次性在文件中写入多行的方法
Jan 28 Python
详解Python3网络爬虫(二):利用urllib.urlopen向有道翻译发送数据获得翻译结果
May 07 Python
Python实现快速排序的方法详解
Oct 25 Python
使用Tensorboard工具查看Loss损失率
Feb 15 Python
Pytorch 实现变量类型转换
May 17 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分页函数
2006/07/08 PHP
CakePHP去除默认显示的标题及图标的方法
2008/10/22 PHP
javascript与CSS复习(《精通javascript》)
2010/06/29 Javascript
JS多物体 任意值 链式 缓冲运动
2012/08/10 Javascript
jquery的$getjson调用并获取远程的JSON字符串问题
2012/12/10 Javascript
js一般方法改写成面向对象方法的无限级折叠菜单示例代码
2013/07/04 Javascript
JQuery加载图片自适应固定大小的DIV
2013/09/12 Javascript
基于javascript实现浏览器滚动条快到底部时自动加载数据
2015/11/30 Javascript
使用jQuery实现WordPress中的Ctrl+Enter和@评论回复
2016/05/21 Javascript
纯js仿淘宝京东商品放大镜功能
2017/03/02 Javascript
AngualrJs清除定时器遇到的坑
2017/10/13 Javascript
详解angular脏检查原理及伪代码实现
2018/06/08 Javascript
JS获取浏览器地址栏的多个参数值的任意值实例代码
2018/07/24 Javascript
详解在Angular4中使用ng2-baidu-map的方法
2019/06/19 Javascript
基于JQuery和DWR实现异步数据传递
2020/10/16 jQuery
微信小程序实现单个或多个倒计时功能
2020/11/01 Javascript
python中尾递归用法实例详解
2015/04/28 Python
python实现带错误处理功能的远程文件读取方法
2015/04/29 Python
Python读取网页内容的方法
2015/07/30 Python
如何使用python爬取csdn博客访问量
2016/02/14 Python
python 通过字符串调用对象属性或方法的实例讲解
2018/04/21 Python
Python中反射和描述器总结
2018/09/23 Python
Python字典遍历操作实例小结
2019/03/05 Python
python脚本当作Linux中的服务启动实现方法
2019/06/28 Python
使用python对多个txt文件中的数据进行筛选的方法
2019/07/10 Python
详解字符串在Python内部是如何省内存的
2020/02/03 Python
python 实现控制鼠标键盘
2020/11/27 Python
机械设计及其自动化专业推荐信
2013/10/31 职场文书
旅游网创业计划书
2014/01/31 职场文书
销售员个人求职的自我评价
2014/02/10 职场文书
优秀工会工作者事迹材料
2014/06/02 职场文书
2014年度党员自我评议
2014/09/13 职场文书
民政局个人整改措施
2014/09/24 职场文书
2014最新预备党员思想汇报范文:中国梦,我的梦
2014/10/25 职场文书
2019个人工作自我评价范文(3篇)
2019/09/19 职场文书
我的收音机情缘
2022/04/05 无线电