Статический полиморфизм (перегрузка методов) и Динамический полиморфизм (переопределение методов):

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?