Это сложная тема ... и все зависит от того, какая версия Python и как объявлены классы.
В Python3 есть простое решение, однако ... например:
class A:
pass
class B:
pass
class C(A, B):
pass
print(C.__mro__)
покажет (__main__.C, __main__.A, __main__.B, object)
, что означает, что сначала будет выполняться поиск класса C
, затем A
, затем B
и, наконец, object
при поиске метода.
Обратите внимание, что существуют случаи, когда Python не позволяет создавать запутанную иерархию классов ... рассмотрим:
class A: pass
class B: pass
class C(A, B): pass
class D(B, A): pass
Что должно произойти, если мы создадим новый класс E
, унаследованный от C
и D
? Нужно ли искать A
до B
или после B
?
Решение Python простое:
class E(C, D): pass
----> 1 class E(C, D): pass
TypeError: Cannot create a consistent method resolution
order (MRO) for bases A, B