gpt4 book ai didi

python - 关于 python MRO 以及 super() 的行为

转载 作者:行者123 更新时间:2023-11-30 23:30:30 24 4
gpt4 key购买 nike

今天我想弄清楚如何__mro__和 python 中的 super 作品一样,我发现了一些对我来说既有趣又奇怪的东西,因为我在阅读 __mro__ 后得到了一些我不理解的东西。 。这是代码片段。

代码片段1:

#!/usr/bin/pyhon

class A(object):
def test(self):
return 'A'

class B(A):
def test(self):
return 'B to %s' % super(B, self).test()

class C(A):
def test(self):
return 'C'

class D(B, C):
pass

print D().test()

输出:

 B to C

代码片段2:当我更新B类内部的 super 时:

#!/usr/bin/pyhon

class A(object):
def test(self):
return 'A'

class B(A):
def test(self):
return 'B to %s' % super(C, self).test()

class C(A):
def test(self):
return 'C'

class D(B, C):
pass

print D().test()

输出:

B to A

然后现在我得到了我之前所期望的。有人可以解释一下 mro 如何与 super 一起使用吗?

最佳答案

D 的 MRO 是 [D, B, C, A, 对象]。

super(C, self) 〜A

super(B, self) 〜C

super(MyClass, self)不是关于“MyClass的基类”,而是关于MyClass的MRO列表中的下一个类。 .

正如评论中所述,super(…)实际上并不返回 MRO 中的下一个类,而是将调用委托(delegate)给它。

关于python - 关于 python MRO 以及 super() 的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20545791/

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