Речь идет о так называемом ромбовидном наследовании и принципе MRO (Method Resolution Order).
Марк Лутц, «Изучаем Python», том 2, гл. 32:
«Путь поиска при наследовании в ромбовидных схемах выполняется больше в манере сначала в ширину ~ Python сначала ищет в любых суперклассах справа от только что просмотренного и только потом поднимается к общему суперклассу вверху. Другими словами, поиск проходит по уровням, прежде чем двигаться вверх.
...
class A: attr = 1 # Обычный класс
class B(A): pass # В и С ведут к А
class С(A): attr = 2
class D(B, С): pass # Проверяет С перед А
х = D()
print(х.attr) # Ищет в х, D, В, С
Атрибут x.attr обнаруживается в суперклассе А, потому что в классических классах
поиск при наследовании поднимается настолько высоко, насколько может, прежде
чем остановиться и начать движение вправо».
Post #4160
982
- 👍 4
- 👎 1