1

今天我试图弄清楚__mro__和 super 在 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 如何与 super 一起工作吗?

4

1 回答 1

3

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

super(C, self)〜一个

super(B, self)〜C

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

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

于 2013-12-12T14:42:56.253 回答