Примеры полиморфизма
1. Полиморфизм через переопределение методов (Override)
Разные классы реализуют один и тот же метод по-своему.
class Dog:
def speak(self):
return "Гав"
class Cat:
def speak(self):
return "Мяу"
for animal in [Dog(), Cat()]:
print(animal.speak())
Вывод:
Гав
Мяу
📌 Один и тот же вызов speak()
ведёт себя по-разному для разных объектов.
2. Полиморфизм через наследование
Один интерфейс в базовом классе — разные реализации в наследниках.
class Shape:
def area(self):
raise NotImplementedError
class Circle(Shape):
def __init__(self, r):
self.r = r
def area(self):
return 3.14 * self.r * self.r
class Square(Shape):
def __init__(self, a):
self.a = a
def area(self):
return self.a * self.a
shapes = [Circle(5), Square(4)]
for shape in shapes:
print(shape.area())
3. Полиморфизм через функции
Функция не проверяет тип объекта — она просто вызывает метод, который предполагается у него есть (duck typing).
def make_it_speak(animal):
print(animal.speak())
class Parrot:
def speak(self):
return "Привет!"
class Frog:
def speak(self):
return "Ква"
make_it_speak(Parrot()) # Привет!
make_it_speak(Frog()) # Ква
📌 Главное, чтобы у объекта был метод speak()
, а не его тип.
4. Полиморфизм в автоматизации тестирования (Page Object Model)
Разные страницы реализуют один и тот же метод по-разному, но тесты используют его одинаково.
class BasePage:
def open(self):
raise NotImplementedError
class LoginPage(BasePage):
def open(self):
print("Открываем страницу логина")
class DashboardPage(BasePage):
def open(self):
print("Открываем дашборд")
# Тест
def test_navigation(page: BasePage):
page.open()
# Можно передать любую страницу
test_navigation(LoginPage())
test_navigation(DashboardPage())
📌 Тесту не важно, какая страница — он просто вызывает open()
.
Коротко суть
Интерфейс одинаковый (метод с одним именем).
Реализация разная (зависит от объекта).
В Python это часто реализуется через наследование или duck typing.
PreviousООП и его принципыNextСтатический полиморфизм (перегрузка методов) и Динамический полиморфизм (переопределение методов):
Last updated
Was this helpful?