Гарантирует ли наследование полиморфизм в ООП

Ответ

Нет, наследование само по себе не гарантирует полиморфизм. Это связанные, но разные концепции.

  • Наследование — это механизм, позволяющий одному классу (потомку) перенимать свойства и методы другого класса (родителя). Его основная цель — повторное использование кода и установление иерархии "является" (is-a).
  • Полиморфизм — это способность объектов с одинаковым интерфейсом (набором методов) иметь разную реализацию этих методов. Он позволяет работать с объектами разных классов через общий родительский тип.

Наследование может быть неполиморфным, когда оно используется исключительно для заимствования реализации без намерения переопределять методы.

Пример (наследование реализации):

# Родительский класс предоставляет утилитарный метод
class WithTimestamp:
    def get_timestamp(self) -> str:
        from datetime import datetime
        return datetime.now().isoformat()

# Потомок использует метод родителя, не изменяя его
class LogMessage(WithTimestamp):
    def __init__(self, message: str):
        self.message = message

    def format(self) -> str:
        # Простое использование унаследованного метода
        ts = self.get_timestamp()
        return f"[{ts}] {self.message}"

log = LogMessage("Server started")
print(log.format())

Здесь LogMessage наследует WithTimestamp для повторного использования кода, но не для полиморфного поведения. Полиморфизм возникает, когда классы-потомки переопределяют методы базового класса, предоставляя свою специфическую реализацию.