← Назад ко всем вопросам

Полиморфизм в Python — примеры из стандартной библиотеки

1️⃣ Как кратко ответить

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

2️⃣ Подробное объяснение темы

Полиморфизм — это концепция объектно-ориентированного программирования, которая позволяет использовать один интерфейс для работы с разными типами объектов. В Python полиморфизм достигается благодаря динамической типизации, что означает, что тип переменной определяется во время выполнения программы, а не заранее.

Зачем нужен полиморфизм?

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

Как работает полиморфизм в Python?

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

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

  1. Функция len()

    Функция len() является полиморфной, так как она может принимать объекты разных типов, таких как строки, списки, кортежи и даже пользовательские объекты, если они реализуют метод __len__().

    print(len("Hello"))  # Вывод: 5
    print(len([1, 2, 3, 4]))  # Вывод: 4
    
  2. Функция sorted()

    Функция sorted() может принимать любой итерируемый объект, будь то список, строка или кортеж, и возвращать новый отсортированный список.

    print(sorted([3, 1, 2]))  # Вывод: [1, 2, 3]
    print(sorted("python"))  # Вывод: ['h', 'n', 'o', 'p', 't', 'y']
    
  3. Метод __str__()

    Метод __str__() используется для получения строкового представления объекта. Он полиморфен, так как может быть переопределен в любом классе, чтобы возвращать строку, которая имеет смысл для этого конкретного класса.

    class Dog:
        def __str__(self):
            return "This is a dog"
    ​
    class Cat:
        def __str__(self):
            return "This is a cat"
    ​
    dog = Dog()
    cat = Cat()
    ​
    print(dog)  # Вывод: This is a dog
    print(cat)  # Вывод: This is a cat
    

Практическое применение

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

class Animal:
    def speak(self):
        pass
​
class Dog(Animal):
    def speak(self):
        return "Woof!"
​
class Cat(Animal):
    def speak(self):
        return "Meow!"
​
def animal_sound(animal):
    print(animal.speak())
​
dog = Dog()
cat = Cat()
​
animal_sound(dog)  # Вывод: Woof!
animal_sound(cat)  # Вывод: Meow!

В этом примере функция animal_sound может принимать любой объект, который является подклассом Animal, и вызывать его метод speak(), демонстрируя полиморфизм в действии.

Тема: ООП
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки