Back to questions
Junior — Middle
59
Объясните принцип определения порядка вызова методов при множественном наследовании в Python 2.
Companies where asked
Trip
Answer from AI
sobes.tech AI
В Python 2 порядок вызова методов при множественном наследовании определяется с помощью алгоритма C3-линеаризации, который формирует последовательность классов (MRO — Method Resolution Order).
Принцип работы:
- Для нового стиля классов (наследующих от
object) используется C3-линеаризация. - MRO строится так, чтобы сохранить порядок наследования, при этом разрешая конфликты и избегая неоднозначностей.
- При вызове метода Python ищет его в классах согласно MRO слева направо.
Пример:
class A(object):
def method(self):
print("A")
class B(A):
def method(self):
print("B")
class C(A):
def method(self):
print("C")
class D(B, C):
pass
d = D()
d.method() # Выведет "B"
print(D.__mro__)
Здесь метод method вызывается из класса B, так как MRO для D будет (D, B, C, A, object).
Для старых стиля классов (без наследования от object) используется другой алгоритм — поиск в глубину слева направо, что может привести к неоднозначностям.