python语法-super方法

super方法用来,继承父类,或祖父类;常用的结构为super(C,self)/python3括号内的可缩写(super());super方法本身是一个类,和当前所在的类(父类)无关,该类使用了mro的算法(方法查找顺序)来决定继承类的顺序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class A():

def __init__(self):
print("---A---")

class B(A):

def __init__(self):
print("---B---")
print(super.__mro__)
super(B,self).__init__()

class C(A):

def __init__(self):
print("---C---")
print(super.__mro__)
super(C,self).__init__()

class D(B,C):

def __init__(self):
print("---D---")
print(super.__mro__)
super().__init__()
D()

方法查找顺序说明:

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策略不一样,虽然两者都是使用从左到右的广度遍历,经典类在某类已继承时,后续在查找到这个类,也不在继承;新式类,在某类已经继承时,后续在查找到改类,会继承最新查找到的;

欢迎关注我的其它发布渠道