【发布时间】:2021-02-01 15:28:18
【问题描述】:
所以我试图了解 MRO 的工作原理,但我无法理解其中的某些部分,我知道解释器从左到右选择特异性而不是泛型,如果是这样,这是怎么发生的?
class X:
pass
class Y:
pass
class Z:
pass
class w:
pass
class A(X, Y):
pass
class B(w, Z):
pass
class D(X, w):
pass
class M(D, A, B, Z):
pass
print(M.mro())
# Output
# [<class '__main__.M'>, <class '__main__.D'>, <class '__main__.A'>, <class '__main__.X'>,
# <class '__main__.Y'>, <class '__main__.B'>, <class '__main__.w'>, <class '__main__.Z'>,
# <class 'object'>]
或者这个
class X:
pass
class Y:
pass
class Z:
pass
class A(X, Y):
pass
class B(Y, Z):
pass
class M(B, A, Z):
pass
# Output:
# [<class '__main__.M'>, <class '__main__.B'>,
# <class '__main__.A'>, <class '__main__.X'>,
# <class '__main__.Y'>, <class '__main__.Z'>,
# <class 'object'>]
print(M.mro())
有人能帮我理解解决顺序吗,因为对我来说,感觉就像规则相互矛盾,每次继承级别都会变得更复杂。
【问题讨论】:
标签: python method-resolution-order