今天我试图弄清楚__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中更新我的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,object]。你知道吗
super(C, self)
~Asuper(B, self)
~Csuper(MyClass, self)
不是关于“MyClass
的基类”,而是关于MyClass
的MRO列表中的下一个类。你知道吗如注释中所述,
super(…)
实际上并不返回MRO中的下一个类,而是将调用委托给它。你知道吗相关问题 更多 >
编程相关推荐