Python继承模式
1. 首先讲一下传统的 深度优先 与 广度优先
深度优先 从下到上 从左到右 (下上左右)
广度优先 从左到右 从下到上 (左右下上)
1.1 Python2继承采用深度优先:
1.2 Python3继承采用广度优先(简单理解,后面给例子剖析并不是简单的广度):
1.3 举个例子
上述图树说明了继承关系,并用数字表示继承优先级。
以上述图示的模型简单举例:
# -*- coding:utf-8 -*-
class A():
name = 'a'
class B(A):
xname = 'b'
class C(A):
name = 'c'
class D(B,C):
xname = 'd'
d =D()
print(d.name)
# 结果
"""
Python2: a
Python3: c
"""
2. Python3继承简答广度优先理解错误纠正
复杂一点的例子你会发现它的继承不是简单的广度优先,而是基于深度优先的广度优先:
2.1 Python2继承采用深度优先:
2.2 Python3继承实际是采用基于深度的广度优先:
2.3 举个例子
# -*- coding:utf-8 -*-
class A():
name = 'a'
class B(A):
name = 'b'
class C(A):
name = 'c'
class D(A):
name = 'd'
class E(B):
xname = 'e'
class F(C):
name = 'f'
class G(D):
name = 'g'
class H(E,F,G):
xname = 'h'
h = H()
print(h.name)
# 结果
"""
Python2: b
Python3: b 如果是普通的广度优先 结果应该是 f
流程应该是 H->E->F->G->B->C->D->A
流程实际是 H->E->B->F->C->G->D->A
"""
结论
python2支持深度优先的树继承
python3支持基于深度优先的广度优先树继承