Назад к вопросам
Junior
89
questionbank

Что такое полиморфизм в контексте программирования?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Полиморфизм - это концепция, позволяющая работать с объектами разных классов через общий интерфейс. В Python это реализуется в основном через "дак-тайпинг" (duck typing) и наследование.

Дак-тайпинг:

Если объект может выполнить требуемые операции (у него есть необходимые методы, атрибуты), то не важно, какого он типа.

# Пример дак-тайпинга
class Dog:
    def speak(self):
        return "Гав!"

class Cat:
    def speak(self):
        return "Мяу!"

def make_sound(animal):
    return animal.speak()

# Хотя Dog и Cat разные классы, make_sound работает с обоими
dog = Dog()
cat = Cat()

print(make_sound(dog))
print(make_sound(cat))

Полиморфизм через наследование:

Подклассы могут переопределять методы родительского класса, предоставляя свою специфичную реализацию.

# Пример полиморфизма через наследование
class Animal:
    def speak(self):
        raise NotImplementedError("Подкласс должен реализовать этот метод")

class Dog(Animal):
    def speak(self):
        return "Гав!"

class Cat(Animal):
    def speak(self):
        return "Мяу!"

def make_sound(animal):
    return animal.speak()

# Объекты разных подклассов вызывают свою версию speak()
dog = Dog()
cat = Cat()

print(make_sound(dog))
print(make_sound(cat))

Преимущества:

  • Упрощает код, делая его более гибким и читаемым.
  • Позволяет работать с коллекциями разнородных объектов единообразно.
  • Облегчает расширение системы новыми типами без изменения существующего кода.

Примеры в стандартной библиотеке Python:

  • Встроенные функции like len(), iter(), str() работают с разными типами данных.
  • Операторы (например, + для сложения чисел, конкатенации строк, объединения списков).