что произойдет в множественном наследовании Python? - PullRequest
0 голосов
/ 13 апреля 2019

Я написал два класса "A" и "B", где в оба класса вы добавили метод с тем же именем, который называется "print". Затем я написал другой класс «C», который расширяет и «A», и «B» следующим образом: «класс C (A, B):», если я вызываю «print» из экземпляра класса «C», то что произойдет

1 Ответ

1 голос
/ 13 апреля 2019

Это сложная тема ... и все зависит от того, какая версия 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...