python 的super使用
来源:互联网 发布:邹平php 编辑:程序博客网 时间:2024/05/17 06:59
当子类需要调用父类的方法时,使用场景最广的应该是继承父类的析构函数(子类也谢了析构函数,并且需要继承父类的析构时可以super一下将父类的析构继承到子类),其余的如果要改写子类的函数(且子类的这个函数和父类同名,并且用到了父类该同名函数)才会去用到super吧?(要调父类的方法直接就可以继承下来用self.fuction()就可以调用了,想知道一下super的,其他应用场景)
上一段代码(爷爷,爸爸,妈妈,儿子的继承关系)
class FooGra(object): def __init__(self): self.gradpaname = "gradapa" self.age = "gradpa age" def bar(self, message): print "in gra" print message print "out gra"class FooDad(FooGra): def __init__(self): self.dadname = "dad" self.age = "dad age" def bara(self, message): print "in dad" print message print "out dad"class FooMom(FooGra): def __init__(self): self.barmomname = "mom" self.age = "mom age" def bar(self, message): print "in mom" print message print "out mom"class FooChild(FooDad, FooMom): def __init__(self): self.childname = "child" self.age = "child age" super(FooChild, self).__init__() def mirror(self, message): print "in child" #super(FooChild, self).bar(message) self.bar(message) print "out child"FooChild().mirror("hehe") #调的mirror继承了bar的实现,只会往上一层调(如果dad没有,会在同一层调用mom,而不是调grandpa,新式类的调用关系)print FooChild().childname#当使用super继承父类的析构函数时,不会继承同一层的mom的析构(从左至右顺序,想同时继承mom该怎么写呢?)<pre name="code" class="python">print FooChild().dadname #在dad层在继承dad的父类析构,然后通过FooChild去访问爷爷的name时能继承成功,就像一个链条一样#print FooChild().momnameprint FooChild().gradpaname
上面练习了一下。
老式类和新式类的区别就在于,最上层的基类有没有继承object,如 class Base(object): --->(貌似新版本的python都默认成新式类了,新式类和老式类在继承父类的顺序有差异,老式是深度优先,新式是广度优先)
然后,继承父类也有两种方法,一种是上面提到的super,还有一种直接用类调用,比如:FooDad.__init__(self),两种方法虽然都是继承父类但还是有差别
1.两种方法不能混用,选其一就可以
2.当然是super比较省事,不至于父类名字改了,造成子类继承也要改代码
3.而且通过类去调用父类方法会多次调父类,在super机制里可以保证公共父类仅被执行一次,至于执行的顺序,是按照mro进行的(还没有探索mro,用super就好)
0 0
- python super的使用
- python 的super使用
- python super类的使用
- Python中Super的使用
- Python中super的使用
- Python中super()方法的使用
- python super 使用
- Python中的super使用
- 【python】super的用法
- python的super
- 【Python】super的用法
- python当中的super
- python 的super
- super关键字的使用
- AS3 Super的使用
- super的使用
- super关键字的使用
- super 方法的使用
- 前端开发案例--360首页左右滑动导航
- java字节序、主机字节序和网络字节序扫盲贴
- 复杂链表的复制
- 深入浅出之正则表达式(二)
- leetcode-75. Sort Colors
- python 的super使用
- iOS开发打包上传报错ERROR ITMS-90096
- 士兵杀敌(四)
- 系统复习:关于数组访问与指针数组
- leetcode-93. Restore IP Addresses
- 柴俊理金:5、18午夜黄金,宁贵沥青操作策略
- LANG变量的设置
- Python实现简单爬虫
- 格式化 C语言源码——命令indent