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使用matplotlib实现在坐标系中画一个矩形的方法
May 20 Python
用Python解决计数原理问题的方法
Aug 04 Python
Python可变参数用法实例分析
Apr 02 Python
Python使用pickle模块储存对象操作示例
Aug 15 Python
对python的bytes类型数据split分割切片方法
Dec 04 Python
python使用xlrd模块读取xlsx文件中的ip方法
Jan 11 Python
Python3实现计算两个数组的交集算法示例
Apr 03 Python
在django admin中配置搜索域是一个外键时的处理方法
May 20 Python
pycharm软件实现设置自动保存操作
Jun 08 Python
python的pip有什么用
Jun 17 Python
python 实现Requests发送带cookies的请求
Feb 08 Python
浅析Python实现DFA算法
Jun 26 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/12/13 PHP
php自动获取目录下的模板的代码
2010/08/08 PHP
thinkPHP的表达式查询用法详解
2016/09/14 PHP
区分JS中的undefined,null,"",0和false
2007/03/08 Javascript
js 可拖动列表实现代码
2011/12/13 Javascript
JQuery的ready函数与JS的onload的区别详解
2013/11/21 Javascript
js showModalDialog参数的使用详解
2014/01/07 Javascript
浅析JavaScript基本类型与引用类型
2014/05/28 Javascript
Js 正则表达式知识汇总
2014/12/02 Javascript
JavaScript位置与大小(1)之正确理解和运用与尺寸大小相关的DOM属性
2015/12/26 Javascript
JavaScript正则表达式实例详解
2016/10/16 Javascript
微信小程序实现点击按钮修改字体颜色功能【附demo源码下载】
2017/12/05 Javascript
Js跳出两级循环方法代码实例
2020/09/22 Javascript
Python从MP3文件获取id3的方法
2015/06/15 Python
在Django的视图中使用form对象的方法
2015/07/18 Python
使用Python对IP进行转换的一些操作技巧小结
2015/11/09 Python
python使用xslt提取网页数据的方法
2018/02/23 Python
python 实现数组list 添加、修改、删除的方法
2018/04/04 Python
实例讲解Python爬取网页数据
2018/07/08 Python
python版本五子棋的实现代码
2018/12/11 Python
Pycharm保存不能自动同步到远程服务器的解决方法
2019/06/27 Python
Python的Lambda函数用法详解
2019/09/03 Python
Django实现auth模块下的登录注册与注销功能
2019/10/10 Python
PyCharm导入python项目并配置虚拟环境的教程详解
2019/10/13 Python
TensorFlow2.X结合OpenCV 实现手势识别功能
2020/04/08 Python
Numpy中np.random.rand()和np.random.randn() 用法和区别详解
2020/10/23 Python
使用Python爬虫爬取小红书完完整整的全过程
2021/01/19 Python
护理专业应届毕业生推荐信
2013/11/15 职场文书
2014村务公开实施方案
2014/02/25 职场文书
学习十八大的心得体会
2014/09/12 职场文书
2014年新农村建设工作总结
2014/12/01 职场文书
客户答谢会致辞
2015/07/30 职场文书
心得体会该怎么写呢?
2019/06/27 职场文书
html5中sharedWorker实现多页面通信的示例代码
2021/05/07 Javascript
mysql连接查询中and与where的区别浅析
2021/07/01 MySQL
JavaScript实现外溢动态爱心的效果的示例代码
2022/03/21 Javascript