Статический полиморфизм (перегрузка методов) и Динамический полиморфизм (переопределение методов):
1. Статический полиморфизм (перегрузка методов)
В классических языках (Java, C++) — это методы с одинаковым именем, но разными параметрами (типами или количеством).
В Python нет полноценной перегрузки, потому что метод определяется по имени, и новый метод с тем же именем перезапишет старый.
Но мы можем имитировать перегрузку с помощью значений по умолчанию или
*args, **kwargs
.
class Calculator:
def add(self, a, b=0, c=0):
return a + b + c
calc = Calculator()
print(calc.add(5)) # 5
print(calc.add(5, 10)) # 15
print(calc.add(5, 10, 15)) # 30
📌 Python делает это через гибкие сигнатуры функций, а не через строгую типовую перегрузку.
2. Динамический полиморфизм (переопределение методов)
Это один интерфейс — разные реализации.
Работает через наследование и переопределение методов.
Какой именно метод будет вызван — решается во время выполнения (runtime).
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 s in shapes:
print(s.area()) # Python сам выберет метод в runtime
Главные отличия
Определяется
Во время компиляции (в Python — имитация через параметры)
Во время выполнения программы
Основан на
Разных сигнатурах методов
Переопределении методов в наследниках
В Python
Эмулируется через *args
, **kwargs
, значения по умолчанию
Обычное наследование и override методов
💡 В автотестах:
Статический — часто для утилитарных методов (логирование, генерация тестовых данных, парсеры).
Динамический — для Page Object Model, API clients, стратегии тестирования.
Last updated
Was this helpful?