gpt4 book ai didi

Python 类继承

转载 作者:行者123 更新时间:2023-12-01 03:55:18 25 4
gpt4 key购买 nike

我在理解 python 的 mro(方法解析顺序)时遇到了一些困难。 Python 的操作顺序是从左到右。所以根据我的理解,调用 M 的顺序应该是。M、B、A、Z、X、Y

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

print(M.mro())

但是正确的调用顺序是。

    [<class '__main__.M'>,
<class '__main__.B'>,
<class '__main__.A'>,
<class '__main__.X'>,
<class '__main__.Y'>,
<class '__main__.Z'>,
<class 'object'>]

谁能解释一下顺序并帮助我理解这一点。谢谢

最佳答案

mro从Python2.3开始就基于C3算法,“合并”是该算法的核心。 how merge works 。根据您的代码,这里我们可以列出如何获取 mro(M):

mro(M) = [M] + merge(mro(B), mro(A), mro(Z), [B,A,Z])    

mro(B) = [B] + merge(mro(Y) , mro(Z)) = [B] + merge([Y] , [Z])
= [B,Y] + merge([Z])
= [B,Y,Z]

mro(A) = [A] + merge(mro(X) , mro(Y))
= [A] + merge([X],[Y])
= [A,X,Y]

mro(Z) = [Z]

返回mro(M):

mro(M) = [M] + merge([B,Y,Z), [A,X,Y], [Z], [B,A,Z]) 
= [M,B] + merge([Y,Z], [A,X,Y], [Z], [A,Z])
= [M,B,A] + merge([Y,Z], [X,Y], [Z], [Z])
= [M,B,A,X] + merge([Y,Z] + [Y] + [Z], [Z])
= [M,B,A,X,Y] + merge([Z] + [Z] + [Z])
= [M,B,A,X,Y,Z]

关于Python 类继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37581930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com