Python Поліморфізм
Слово "поліморфізм" означає "багато форм", і в програмуванні воно відноситься до методів/функцій/операторів з однаковою назвою, які можуть бути виконані для багатьох об’єктів або класів.
Поліморфізм функцій
Прикладом функції Python, яку можна використовувати для різних об’єктів, є функція len().
String / Рядок
Для рядків len() повертає кількість символів:
Tuple / Кортеж
Для кортежів len() повертає кількість елементів у кортежі:
Dictionary / Словник
Для словників len() повертає кількість пар ключ/значення у словнику:
Приклад
thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
print(len(thisdict))
Спробуйте самі »
Поліморфізм класу
Поліморфізм часто використовується в методах класу, де ми можемо мати кілька класів з однаковою назвою методу.
Наприклад, скажімо, у нас є три класи: Car, Boat і Plane, і всі вони мають метод під назвою move():
Приклад
Різні класи з одним методом:
class Car:
def __init__(self, brand, model):
self.brand = brand
self.model = model
def move(self):
print("Drive!")
class Boat:
def __init__(self, brand, model):
self.brand = brand
self.model = model
def move(self):
print("Sail!")
class Plane:
def __init__(self, brand, model):
self.brand = brand
self.model = model
def move(self):
print("Fly!")
car1 = Car("Ford", "Mustang") #Створити Car клас
boat1 = Boat("Ibiza", "Touring 20") #Створити Boat клас
plane1 = Plane("Boeing", "747") #Створити Plane клас
for x in (car1, boat1, plane1):
x.move()
Спробуйте самі »
Подивіться на цикл for в кінці. Через поліморфізм ми можемо виконати той самий метод для всіх трьох класів.
Поліморфізм класу успадкування
А як щодо класів з дочірніми класами з однаковою назвою? Чи можемо ми тут використати поліморфізм?
Так. Якщо ми використаємо наведений вище приклад і створимо батьківський клас під назвою Vehicle, а також Car, Boat, Plane дочірні класи Vehicle, дочірні класи успадковують методи Vehicle, але може замінити їх:
Приклад
Створіть клас під назвою Vehicle і створіть Car, Boat, Plane дочірні класи Vehicle:
class Vehicle:
def __init__(self, brand, model):
self.brand = brand
self.model = model
def move(self):
print("Move!")
class Car(Vehicle):
pass
class Boat(Vehicle):
def move(self):
print("Sail!")
class Plane(Vehicle):
def move(self):
print("Fly!")
car1 = Car("Ford", "Mustang") #Створити Car об’єкт
boat1 = Boat("Ibiza", "Touring 20") #Створити Boat об’єкт
plane1 = Plane("Boeing", "747") #Створити Plane об’єкт
for x in (car1, boat1, plane1):
print(x.brand)
print(x.model)
x.move()
Спробуйте самі »
Дочірні класи успадковують властивості та методи від батьківського класу.
У прикладі вище ви бачите, що клас Car порожній, але він успадковує brand, model і move() з Vehicle.
Класи Boat і Plane також успадковують brand, model та move() з Vehicle, але вони обидва замінюють метод move().
Через поліморфізм ми можемо виконати той самий метод для всіх класів.

