uper 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。总之前人留下的经验就是:保持一致性。要不全部用类名调用父类,要不就全部用 super,不要一半一半。

普通继承
『代码』

[python] view plain copy
  1. class FooParent(object):
  2. def __init__(self):
  3. self.parent = 'I\'m the parent.'
  4. print 'Parent'
  5. def bar(self,message):
  6. print message, 'from Parent'
  7. class FooChild(FooParent):
  8. def __init__(self):
  9. FooParent.__init__(self)
  10. print 'Child'
  11. def bar(self,message):
  12. FooParent.bar(self,message)
  13. print 'Child bar function.'
  14. print self.parent
  15. if __name__=='__main__':
  16. fooChild = FooChild()
  17. fooChild.bar('HelloWorld')

super继承

『代码』

[python] view plain copy
  1. class FooParent(object):
  2. def __init__(self):
  3. self.parent = 'I\'m the parent.'
  4. print 'Parent'
  5. def bar(self,message):
  6. print message,'from Parent'
  7. class FooChild(FooParent):
  8. def __init__(self):
  9. super(FooChild,self).__init__()
  10. print 'Child'
  11. def bar(self,message):
  12. super(FooChild, self).bar(message)
  13. print 'Child bar fuction'
  14. print self.parent
  15. if __name__ == '__main__':
  16. fooChild = FooChild()
  17. 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的用法相关推荐

  1. python中super的用法实例解析

    概念 super作为python的内建函数.主要作用如下: 允许我们避免使用基类 跟随多重继承来使用 实例 在单个继承的场景下,一般使用super来调用基类来实现: 下面是一个例子: class Ma ...

  2. python中的super用法详解_Python中super函数用法实例分析

    本文实例讲述了python中super函数用法.分享给大家供大家参考,具体如下: 这是个高大上的函数,在python装13手册里面介绍过多使用可显得自己是高手 23333. 但其实他还是很重要的. 简 ...

  3. 【python】类继承中super的用法

    阅读本文,需要知道python中的类与继承的概念. 1.总述 在python中,通过类的继承机制,可以实现在子类中调用父类的方法,从而避免写重复的代码.但在面临多继承时,如果多个父类中都实现了某个相同 ...

  4. python中with是什么意思,Python中With的用法

    在看Dive Into Python中有关描述文件读写那章节的时候,看到了有关with的用法,查阅下相关资料,记录下来,以备后用. 官方的reference上有关with statement是这样说的 ...

  5. 五分钟理解yield在python中的简单用法,让你不再迷惑

    很多同学无论是在学习python还是使用python的过程中,都会遇到yield关键字,这个让人头大的问题,今天,就给大家分享一下我自学yield的心路历程 基本概念: (1)在 Python 中,使 ...

  6. format函数python的顺序_[转载] Python中format函数用法

    Python中format函数用法 format优点 format是python2.6新增的格式化字符串的方法,相对于老版的%格式方法,它有很多优点. 1.不需要理会数据类型的问题,在%方法中%s只能 ...

  7. python代码大全表解释-python中的字典用法大全的代码

    如下代码是关于python中的字典用法大全的代码. #!/usr/bin/env python # # [SNIPPET_NAME: Dictionaries 101] # [SNIPPET_CATE ...

  8. python教程实例-Python中函数的用法实例教程

    本文以数值计算为例讲述了Python中函数的用法,分享给大家供大家参考借鉴之用.具体如下: 我们都知道圆的面积计算公式为: S = πr2 当我们知道半径r的值时,就可以根据公式计算出面积.假设我们需 ...

  9. 详解python中的用法_详解python中*号的用法

    1.表示乘号 2.表示倍数,例如: def T(msg,time=1): print((msg+' ')*time) T('hi',3) 打印结果(打印3次): hi hi hi 3.单个 * (1) ...

最新文章

  1. 单调队列多重背包时间复杂度O(vn)
  2. 面试题整理9 连续子数组的最大和
  3. 分库、分表、分区的区别,傻傻分不清?
  4. 【Linux】一步一步学Linux——as命令(260)
  5. TopN算法与排行榜
  6. 【2017年第1期】大数据能力开放平台创新和发展
  7. 冲刺阶段 day 4
  8. java遍历字符串_Java后端开发算法基础面试题分享,你离大厂也许就差这份面试题
  9. DockOne微信分享(一一零):Docker在沪江落地的实践
  10. 入门选手都能了解的聚类算法之二(DBSCAN)
  11. tp5 mysql 使用ignore_tp5数据库配置操作
  12. 邮箱服务器输入密码,Foxmail的设置方法?
  13. 使用原生JavaScript改变DOM元素面试题
  14. laravel学习1.0
  15. 实验名称:华为基本ACL 2000配置
  16. 使用docsify搭建在线文档中心
  17. 计算机中信息的表示与存储教案,计算机基础教案2--1.2信息的表示与存储.doc
  18. 检查版本更新,跳转到腾讯应用宝进行下载
  19. 广告公司不会被MCN干掉,但会被打残
  20. HDX工作模式SECS协议工业低频RFID读写器|读卡器CK-S610-SE硬件接线方法与选择

热门文章

  1. 性能优化(7):教你正确使用css选择器
  2. html中添加背景音乐的标签,添加背景音乐的html标签是什么
  3. geetest php,Laravel 集成 Geetest验证码的方法php实例
  4. OpenCV中的模板匹配
  5. 监督学习 | 非线性回归 之多项式回归原理及Sklearn实现
  6. 二分法采用五五分平均复杂度最小(相比四六分或三七分等)的定量证明方法
  7. P5703 【深基2.例5】苹果采购(python3实现)--2022.01.29
  8. Java工作笔记-类型转换的一种思路(前后端分离、反射)
  9. Java笔记-获取当前时间及对当前时间进行加减及时间对比
  10. Java笔记-编码方式创建kaptcha验证码