Dan*_*gel 3 python inheritance method-resolution-order python-3.x
我目前正在学习 Python 考试,但我还不了解 Python 3 中的 MRO 和线性化。
class F: pass
class G: pass
class H: pass
class E(G,H): pass
class D(E,F): pass
class C(E,G): pass
class B(C,H): pass
class A(D,B,E): pass
Run Code Online (Sandbox Code Playgroud)
例如,在一项作业中,存在一个问题:在 A 类的线性化中,E 是否可能出现在 C 之前。
如何判断是否可以呢?如何尽可能简单地描述线性化算法(C3)?我真的很感谢有关这方面的各种解释和资源,因为我很难理解 Python 中的线性化。
预先非常感谢!
rzs*_*khr 10
# This order is called Method Resolution Order (`mro()`)
class A(object):
def dothis(self):
print('Doing this in A')
class B(A):
pass
class C(object):
def dothis(self):
print('Doing this in C')
class D(B, C):
pass
d_instance = D()
d_instance.dothis()
# METHOD RESOLUTION ORDER
print(D.mro())
'''
OUTPUT:
# Doing this in A
# [<class '__main__.D'>, <class '__main__.B'>, <class '__main__.A'>, <class '__main__.C'>, <class 'object'>]
A
| C
B(A) /
\
D(B, C)
RESOLUTION ORDER IS (DFS) = D-B-A-C
A
/ \
B(A) C(A)
\ /
D(B, C)
If the same class appears in mro, the earlier occurrences get removed
D-B-A-C-A -> D-B-C-A, hence still a DFS
RESOLUTION ORDER IS (In Diamond shape) = D-B-C-A
'''
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2427 次 |
| 最近记录: |