Термин полиморфизм буквально означает наличие нескольких форм. В контексте объектно-ориентированного программирования, полиморфизм означает способность объекта вести себя по-разному.
Полиморфизм в программировании реализуется через перегрузку метода, либо через его переопределение.
Перегрузка метода
Перегрузка метода относится к свойству метода вести себя по-разному, в зависимости от количества или типа параметров. Взглянем на очень простой пример перегрузки метода. Выполним следующий скрипт:
# создаем класс 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