Полиморфизм через наследование достигается созданием иерархии классов, где:
Пример:
class Animal:
    def make_sound(self):
        print("Generic animal sound")
class Dog(Animal):
    def make_sound(self):
        print("Woof!")
class Cat(Animal):
    def make_sound(self):
        print("Meow!")
animals = [Dog(), Cat(), Animal()]
for animal in animals:
    animal.make_sound()
  Полиморфизм через наследование — это механизм, позволяющий объектам разных классов, имеющих общего предка, обрабатываться единообразно через методы, определенные в базовом классе.
Чтобы создать классы, поддерживающие полиморфизм через наследование, нужно:
Пример на Python:
class Животное:
    def __init__(self, имя):
        self.имя = имя
    def издать_звук(self):
        print("Животное издает звук") # Базовая реализация.  Подклассы переопределят ее
class Собака(Животное):
    def издать_звук(self):
        print("Гав-гав!") # Переопределяем метод для класса Собака
class Кошка(Животное):
    def издать_звук(self):
        print("Мяу!") # Переопределяем метод для класса Кошка
# Пример использования полиморфизма
животные = [Собака("Бобик"), Кошка("Муся"), Животное("Неизвестное")]
for животное in животные:
    животное.издать_звук() # Вызывается соответствующий метод для каждого объекта
    Пояснения к примеру:
Животное — это базовый класс с методом издать_звук().Собака и Кошка — это подклассы, которые наследуют от Животное.издать_звук(), предоставляя свою специфическую реализацию.for мы итерируемся по списку объектов разных типов (Собака, Кошка, Животное), но для каждого объекта вызывается метод издать_звук(), который соответствует типу этого объекта.  Это и есть полиморфизм.Этот пример демонстрирует, как полиморфизм позволяет обрабатывать объекты разных классов единообразно, используя общий интерфейс (метод издать_звук()), но при этом каждый класс может иметь свою собственную реализацию этого метода.