假如在多继承中,父类A和父类B中有一个同名的方法,子类调用的时候,调用哪个呢?
class Base(object):
def test(self):
print('----base----')
class A(Base):
def test(self):
print('----A----')
class B(Base):
def test(self):
print('----B----')
class C(A, B):
pass
c = C()
c.test()
print(C.__mro__) # C类对象搜索方法时的顺序
发现调用A,那假如A没有test()方法,是先调用B还是调用Base呢? 很多人认为会调用B,其实并不一定了,我可以使用python中__mro__方法来查看C类搜索方法时的顺序:
打印发现A调用完之后确实调用B,但是这是不一定的,日后工作时怕出错可以使用__mro__来查看一下。__mro__是由C3算法写成,它决定着类搜索方法时的先后顺序,有兴趣的可以去了解下C3算法