Ответ
Нет, наследование само по себе не гарантирует полиморфизм. Это связанные, но разные концепции.
- Наследование — это механизм, позволяющий одному классу (потомку) перенимать свойства и методы другого класса (родителя). Его основная цель — повторное использование кода и установление иерархии "является" (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
для повторного использования кода, но не для полиморфного поведения. Полиморфизм возникает, когда классы-потомки переопределяют методы базового класса, предоставляя свою специфическую реализацию.