今天我想弄清楚如何__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/