В этой статье мы изучим полиморфизм, разные типы полиморфизма и рассмотрим на примерах как мы можем реализовать полиморфизм в Python. В буквальном значении полиморфизм означает множество форм. Полиморфизм — очень важная идея в программировании. Она заключается в использовании единственной сущности(метод, оператор или объект) для представления различных типов в различных сценариях использования. Давайте посмотрим на пример: Мы знаем, что оператор + часто используется в программах на Python. Но он не имеет единственного использования. Для целочисленного типа данных оператор + используется чтобы сложить операнды. Итак, программа выведет на экран 3. Подобным образом оператор + для строк используется для конкатенации. В результате будет выведено Python Programming.  Здесь мы можем увидеть единственный оператор + выполняющий разные операции для различных типов данных. Это один из самых простых примеров полиморфизма в Python. В Python есть некоторые функции, которые могут принимать аргументы разных типов. Одна из таких функций — len(). Она может принимать различные типы данных. Давайте посмотрим на примере, как это работает. Вывод: Здесь мы можем увидеть, что различные типы данных, такие как строка, список, кортеж, множество и словарь могут работать с функцией len(). Однако, мы можем увидеть, что она возвращает специфичную для каждого типа данных информацию. Полиморфизм — очень важная идея в объектно-ориентированном программировании. Чтобы узнать больше об ООП в Python, посетите эту статью: Python Object-Oriented Programming. Мы можем использовать идею полиморфизма для методов класса, так как разные классы в Python могут иметь методы с одинаковым именем. Позже мы сможем обобщить вызов этих методов, игнорируя объект, с которым мы работаем. Давайте взглянем на пример: Вывод: Здесь мы создали два класса Cat и Dog. У них похожая структура и они имеют методы с одними и теми же именами info() и make_sound(). Однако, заметьте, что мы не создавали общего класса-родителя и не соединяли классы вместе каким-либо другим способом. Даже если мы можем упаковать два разных объекта в кортеж и итерировать по нему, мы будем использовать общую переменную animal. Это возможно благодаря полиморфизму. Как и в других языках программирования, в Python дочерние классы могут наследовать методы и атрибуты родительского класса. Мы можем переопределить некоторые методы и атрибуты специально для того, чтобы они соответствовали дочернему классу, и это поведение нам известно как переопределение метода(method overriding). Полиморфизм позволяет нам иметь доступ к этим переопределённым методам и атрибутам, которые имеют то же самое имя, что и в родительском классе. Давайте рассмотрим пример: Вывод: Здесь мы можем увидеть, что такие методы как __str__(), которые не были переопределены в дочерних классах, используются из родительского класса. Благодаря полиморфизму интерпретатор питона автоматически распознаёт, что метод fact() для объекта a(класса Square) переопределён. И использует тот, который определён в дочернем классе. С другой стороны, так как метод fact() для объекта b не переопределён, то используется метод с таким именем из родительского класса(Shape). Заметьте, что перегрузка методов(method overloading) — создание методов с одним и тем же именем, но с разными типами аргументов не поддерживается в питоне. Python. Developer/QA Automation.