今天我试图弄清楚__mro__
和超级如何在python中工作,我发现了一些有趣的东西以及对我来说很奇怪,因为我在阅读__mro__
之后得到了一些我不理解的东西。 。这是代码片段。
Code Snippets 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合作?
答案 0 :(得分:3)
D的MRO是[D,B,C,A,对象]。
super(C, self)
~A
super(B, self)
〜C
super(MyClass, self)
不是关于“MyClass
的基类”,而是关于MyClass
的MRO列表中的下一个类。
正如评论中所述,super(…)
实际上并没有返回MRO中的下一个课程,而是委托调用它。