奇怪的继承
python2中才有经典类,没有继承object的类都是经典类。
python3中都是新式类,继承object类的都是新式类,py3中默认继承object类。
Python3中的继承
钻石继承
1 | graph TD |
1 | class A: |
A | B(A) | C(A) | D(C,B) | 输出 |
---|---|---|---|---|
有 | 有 | 有 | 有 | D |
有 | 有 | 有 | 无 | C |
有 | 有 | 无 | 无 | B |
有 | 无 | 无 | 无 | A |
U型继承
1 | graph TD |
继承顺序:B–>A–>C–>E
1 | graph TD |
继承顺序:B–>A–>C—>E–>F
可以通过
mro()
来实现查看继承顺序,继承顺序遵循的是广度优先算法
Python2中的继承
继承顺序遵循的是深度优先算法(从左向右查找,一条分支找到底,若果没找到就去另一条分支继续找)
1 | graph TD |
继承顺序:B–>A–>F—>C–>E
补充
super() 只存在于Python3当中‘
mro() 只存在与新式类