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

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

Статический полиморфизм в Python осуществляется через механизм перегрузки методов, когда одинаковое имя метода используется в классе с разными параметрами. Однако, в Python нет "настоящей" перегрузки методов, как, например, в языке C++. Вместо этого, последний метод с определенным именем и параметрами переопределяет предыдущие.

Пример статического полиморфизма:

class MathOperations:
    def add(self, x, y):
        return x + y

    def add(self, x, y, z):
        return x + y + z

# Создаем объект класса
math_ops = MathOperations()

# Вызываем перегруженные методы
result1 = math_ops.add(2, 3)
result2 = math_ops.add(2, 3, 4)

print(result1)  # Вывод: 7
print(result2)  # Вывод: 9

В этом примере, метод add перегружен с разным количеством параметров, и последний метод считается действительным.

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

Динамический полиморфизм в Python происходит, когда подкласс предоставляет реализацию метода, который уже был определен в его базовом классе. Это позволяет объектам разных классов использовать одинаковые методы с одинаковыми именами, что обеспечивает единообразие в интерфейсе.

Пример динамического полиморфизма:

class Animal:
    def speak(self):
        return "Generic animal sound"

class Dog(Animal):
    def speak(self):
        return "Woof!"

class Cat(Animal):
    def speak(self):
        return "Meow!"

# Создаем объекты разных классов
my_animal = Animal()
my_dog = Dog()
my_cat = Cat()

# Вызываем метод speak у разных объектов
print(my_animal.speak())  # Вывод: Generic animal sound
print(my_dog.speak())     # Вывод: Woof!
print(my_cat.speak())     # Вывод: Meow!

В этом примере, метод speak в базовом классе Animal переопределен в подклассах Dog и Cat, что демонстрирует динамический полиморфизм.

Last updated