博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python中super的用法实例
阅读量:6214 次
发布时间:2019-06-21

本文共 1588 字,大约阅读时间需要 5 分钟。

      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')
程序运行结果相同,为:代码如下:ParentChildHelloWorld from ParentChild bar fuctionI'm the parent.

从运行结果上看,普通继承和super继承是一样的。但是其实它们的内部运行机制不一样,这一点在多重继承时体现得很明显。在super机制里可以保证公共父类仅被执行一次,至于执行的顺序,是按照mro进行的(E.__mro__)。

注意super继承只能用于新式类,用于经典类时就会报错。
新式类:必须有继承的类,如果没什么想继承的,那就继承object
经典类:没有父类,如果此时调用super就会出现错误:『super() argument 1 must be type, not classobj』

 

关于super用法的详细研究可参考「」

转载地址:http://tzpja.baihongyu.com/

你可能感兴趣的文章
zookeeper 原理
查看>>
【spring】【转】Spring学习笔记2——高级特性
查看>>
urlparse获取url后面的参数
查看>>
sys stderr作用
查看>>
windows phone 浏览器(1)[转]
查看>>
OM: release hold的时候,又遇到限制:You are not authorized to release this hold.
查看>>
sqlcmd
查看>>
SQL触发器实例讲解
查看>>
虚拟视频驱动程序vivi.c源码分析
查看>>
有趣的Linux命令行效果
查看>>
C语言---关于链表的各项操作总结-----单向链表
查看>>
MFC Button控件自绘制----详细讲解
查看>>
Java 编程下 final 关键字
查看>>
连接主机Java网络编程(一)- 一个简单的服务端/客户端应用程序
查看>>
高度行IOS tableView常用属性--
查看>>
Miss Useless that only leave it
查看>>
.NET:可扩展的单据编号生成器 + 简单的解释器
查看>>
Linux服务器守护进程+自动启动+服务配置笔记
查看>>
Oracle Class6-2. PL/SQL 简介(数据类型,逻辑比较,控制结构,错误处理)
查看>>
枚举状态POJ1753-Flip Game(枚举)
查看>>