Sobes.tech
Back to questions
Junior — Middle
52

Что произойдет, если создать класс, унаследованный от нескольких базовых классов, у которых есть одинаковые методы?

Answer from AI

sobes.tech AI

Если в Python создать класс, унаследованный от нескольких базовых классов, у которых есть методы с одинаковыми именами, то при вызове такого метода будет использован метод из первого базового класса в списке наследования. Это происходит из-за механизма разрешения методов (Method Resolution Order, MRO).

MRO определяет порядок поиска методов в иерархии классов. Чтобы увидеть порядок, можно использовать атрибут __mro__ или функцию mro():

class A:
    def method(self):
        print("A method")

class B:
    def method(self):
        print("B method")

class C(A, B):
    pass

c = C()
c.method()  # Выведет: A method

print(C.__mro__)

В этом примере метод method из класса A будет вызван, потому что A стоит первым в списке наследования класса C. Если нужно вызвать метод из другого базового класса, можно явно обратиться к нему, например, B.method(self).