super方法用来,继承父类,或祖父类;常用的结构为super(C,self)/python3括号内的可缩写(super());super方法本身是一个类,和当前所在的类(父类)无关,该类使用了mro的算法(方法查找顺序)来决定继承类的顺序
1 | class A(): |
方法查找顺序说明:
super.mro策略;采用的是查找继承类的上一个节点的方式来实现继承,如super(D,self).__init__();实际上继承的是上一个节点类B;Python2和Python3使用super来继承时,使用上存在差异,Python必须使用super(C,self)方式继承,python3则可同时使用super()和super(C,self)来进行继承;同时Python2存在class A:/class A(object):这两种经典类和新式类;Python3只有新式类;经典类和新式类的mro策略不一样,虽然两者都是使用从左到右的广度遍历,经典类在某类已继承时,后续在查找到这个类,也不在继承;新式类,在某类已经继承时,后续在查找到改类,会继承最新查找到的;