tgoop.com/physics_lib/14461
Create:
Last Update:
Last Update:
👨🏻💻 В нашем дружественном IT-канале 🔵 Эпсилон была опубликована интересная задачка по программированию. В этом посте разберем её подробно.
class A:
def process(self):
return 'A'
class B(A):
def process(self):
return 'B'
class C(A, B):
pass
obj = C()
print(obj.process())
📜 Варианты ответов:
⚡️ — 1. А
❤️ — 2. B
👍🏻 — 3. Будет вызвано исключение TypeError
👾 — 4. С
Правильный ответ: 3. Будет вызвано исключение TypeError. Но почему так сработает?
Пояснение: Код не сможет быть даже исполнен из-за ошибки в определении класса C. При создании класса C Python пытается построить порядок разрешения методов (MRO). Класс C наследуется от A и B, при этом класс B сам является наследником A.
Это создаёт противоречивую иерархию, которую невозможно выстроить линейно и логично. С точки зрения MRO, класс A не может находиться в иерархии как до класса B (так как B наследуется от A), так и после него (так как C наследует от A после B). Это противоречие приводит к ошибке. Если вы запустите этот код, интерпретатор выдаст исключение еще на этапе создания класса C:
TypeError: Cannot create a consistent method resolution order (MRO) for bases A, B
Вывод: Задача проверяет знание не только того, как вызываются методы, но и того, как Python внутренне строит иерархии классов и не позволяет создавать некорректные наследования.
✍🏻 Напишите в комментариях, вы смогли бы решить такую задачу без подсказки? Какой первый ответ вам пришел в голову? #python #программирование #разработка #архитектура
📙 Как устроен Python. Гид для разработчиков, программистов и интересующихся [2019] Харрисон
📗 Python. Исчерпывающее руководство [2023] Бизли Д.
📕 Мощный Python: Шаблоны и стратегии работы с современным Python [2025] Максвелл Аарон
📒 Python для хакеров [2023] Ли Воган
📙 Сверхбыстрый Python [2023] Тиаго Антао
📒 Основы искусственного интеллекта в примерах на Python. 2-е изд. [2023] Анатолий Постолит
💡 Physics.Math.Code // @physics_lib