Ответ
Да, в Python можно явно вызвать реализацию метода из конкретного родительского класса, даже если он переопределен и MRO (Method Resolution Order) по умолчанию выбрал бы другую реализацию. Это делается путем прямого обращения к классу.
Способ: Прямой вызов через класс
Самый простой способ — вызвать метод напрямую у класса-предка, передав экземпляр self в качестве первого аргумента. Это позволяет точно указать, какую версию метода вы хотите использовать.
Пример
class A:
def process(self):
print("Processing in A")
class B:
def process(self):
print("Processing in B")
# MRO для C: C -> A -> B -> object
class C(A, B):
def run(self):
print("--- Running default MRO ---")
self.process() # Вызовет A.process() согласно MRO
print("--- Running specific implementation ---")
# Явно вызываем реализацию из класса B
B.process(self)
instance = C()
instance.run()
Вывод:
--- Running default MRO ---
Processing in A
--- Running specific implementation ---
Processing in B
Такой подход полезен в сложных сценариях с множественным наследованием (например, при работе с mixins), когда необходимо вызвать логику из конкретного родителя, а не следовать стандартной цепочке super().