python super 继承

原创 2016年08月29日 12:49:56
super 能自动找到父类的方法,而且还传进self,所以在继承的时候不需要给出任何基类的名字。

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

普通继承
『代码』

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



super继承

『代码』

 

  1. class FooParent(object):  
  2.     def __init__(self):  
  3.         self.parent = 'I\'m the parent.'  
  4.         print 'Parent'  
  5.       
  6.     def bar(self,message):  
  7.         print message,'from Parent'  
  8.   
  9. class FooChild(FooParent):  
  10.     def __init__(self):  
  11.         super(FooChild,self).__init__()  
  12.         print 'Child'  
  13.           
  14.     def bar(self,message):  
  15.         super(FooChild, self).bar(message)  
  16.         print 'Child bar fuction'  
  17.         print self.parent  
  18.   
  19. if __name__ == '__main__':  
  20.     fooChild = FooChild()  
  21.     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用法的详细研究可参考「http://blog.csdn.net/johnsonguo/article/details/585193」

【原创】面试题 python …

简单说一下,这是上海一家公司给我的两道题,先让我做出来,然后再进行进一步的沟通,但是我已经找到工作了,所以就把这道题发了过去。。    Given a array of 10,000 random...
  • u012731379
  • u012731379
  • 2017年03月20日 14:45
  • 57

Python 学习积累《一》

配置Python,Eclipse 环境: http://www.qrong.com/archives/513 TypeError: 'module' object is not callable 原因...
  • achang21
  • achang21
  • 2013年09月15日 10:22
  • 748

Python - 正则表达式指南

从这里学习而得:http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Py...
  • smile_benson
  • smile_benson
  • 2016年05月19日 23:28
  • 603

python 多线程应用

转自:http://www.cnblogs.com/fnng/p/3670789.html 单线程     在好些年前的MS-DOS时代,操作系统处理问题都是单任务的,我想做听音乐和看电影两件事儿,那...
  • biboshouyu
  • biboshouyu
  • 2016年11月15日 09:25
  • 264

python 常用模块

UserDict >>> dict1=UserDict({'a':1,'b':2}).keys() >>> dict1 ['a', 'b'] >>> re.sub(r'(\w+) (\w+)...
  • leexurui
  • leexurui
  • 2016年08月29日 12:49
  • 83

python 语法笔记

[python] view plaincopy i=int(raw_input("i= "))   if i==0:      print 'i=0'   elif i==1...
  • leexurui
  • leexurui
  • 2016年08月29日 12:49
  • 161

【转载+总结】Python 干货

1. 知乎【使用 Python 会降低程序员的编程能力吗?】 首先楼主不知道知乎就是Python做支撑的么? 以前我是一个Linux/C 程序员,后来我自学了Python,工作中利用Python做了一...
  • u012731379
  • u012731379
  • 2017年03月20日 14:47
  • 240

【原创】python xml处理

写个简单的xml处理,russiansample.xml 在C:\Python\mytest\目录下,内容如下:                              标题一      ...
  • u012731379
  • u012731379
  • 2017年03月20日 14:38
  • 56

【原创】python 反射或者一个…

Main() ̹͐͐͐-̹͐͐͐-̹͐͐͐-̹͐͐͐-̹͐͐͐-͐͐͐-͐͐͐-͐͐͐-͐͐͐-͐͐͐͐͐͐-͐͐͐-͐͐͐-͐͐͐-͐͐͐-͐͐͐͐͐͐-͐͐͐-͐͐͐-͐͐͐>͐͐͐-͐͐͐-͐͐...
  • u012731379
  • u012731379
  • 2017年03月20日 14:45
  • 67

【转载】Python 基础语法(二)…

作者:Peter 出处:http://t.cn/SInKe7 Python 基础语法(二) --------------------------------------------接 Py...
  • szdbl
  • szdbl
  • 2015年09月18日 15:47
  • 182
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:python super 继承
举报原因:
原因补充:

(最多只允许输入30个字)