关于python MRO和super()的行为方式



今天我试图弄清楚 __mro__ 和超级在 python 中是如何工作的,我发现了一些有趣和奇怪的东西,因为我得到了一些我在阅读后不理解的东西__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 时:

#!/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 如何与超级一起工作吗?

D

的 MRO 是 [D, B, C, A, object]。

super(C, self) ~ A

super(B, self) ~ C

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

如注释中所述,super(…)实际上不会返回 MRO 中的下一个类,而是委托调用它。

相关内容

  • 没有找到相关文章

最新更新