Термин полиморфизм буквально означает наличие нескольких форм. В контексте объектно-ориентированного программирования, полиморфизм означает способность объекта вести себя по-разному.

Полиморфизм в программировании реализуется через перегрузку метода, либо через его переопределение.

Перегрузка метода

Перегрузка метода относится к свойству метода вести себя по-разному, в зависимости от количества или типа параметров. Взглянем на очень простой пример перегрузки метода. Выполним следующий скрипт:

# создаем класс Car
class Car:  
   def start(self, a, b=None):
        if b is not None:
            print (a + b)
        else:
            print (a)
car_a = Car()  
car_a.start(10) #10
car_a.start(10, 20) #30

Переопределение метода

Переопределение метода относится к наличию метода с одинаковым названием в дочернем и родительском классах. Определение метода отличается в родительском и дочернем классах, но название остается тем же.

# создание класса Vehicle
class Vehicle:  
    def print_details(self):
        print("Это родительский метод из класса Vehicle")

# создание класса, который наследует Vehicle
class Car(Vehicle):  
    def print_details(self):
        print("Это дочерний метод из класса Car")

# создание класса Cycle, который наследует Vehicle
class Cycle(Vehicle):  
    def print_details(self):
        print("Это дочерний метод из класса Cycle")

car_a = Vehicle()  
car_a. print_details() #Это родительский метод из класса Vehicle
car_b = Car()  
car_b.print_details() #Это дочерний метод из класса Car
car_c = Cycle()  
car_c.print_details() #Это дочерний метод из класса Cycle