Need Help? Call Us: 877.688.8811

Log In | Register

Полиморфизм в Python понятие и принцип работы с примерами

Это позволяет нам анализировать взаимодействие посетителей с сайтом и делать его лучше. Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie.

полиморфизм python

Метод fact() для объекта b не является переопределенным, поэтому используется метод с таким же именем из родительского класса (Shape). Полиморфизм является мощной концепцией ООП, которая делает код более гибким и переиспользуемым. Он позволяет функциям и объектам принимать множество форм и делает Python идеальным для эффективного и эффективного кодирования.

🐍 Самоучитель по Python для начинающих. Часть 19: Основы ООП – абстракция и полиморфизм

Согласно полиморфизму ООП, возвращать метод __add__ может что угодно. Может вообще ничего не возвращать, а “молча” вносить изменения в какие-то уже существующие объекты. Допустим, в вашей программе метод перегрузки сложения будет возвращать новый объект того же класса. Рассмотрим пример полиморфизма на еще одном методе, который перегружает функцию str, которую автоматически вызывает функция print. Однако классы не обязательно должны быть связанны наследованием.

Затем создайте три подкласса RedWine, WhiteWine и RoseWine, которые наследуют методы и атрибуты от Wine и реализуют свои собственные версии метода serve(). Кроме того, создайте класс Winery, который ведет список вин и имеет метод serve_wines(), вызывающий метод serve() для каждого вина. Для CRM винодельни нужно написать модуль, отвечающий за учет
красных, белых и розовых вин, каждое из которых имеет свое название, сорт винограда,
год и температуру подачи.

Полиморфизм в Python

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

полиморфизм python

Помните, что класс похож на схему, а объект — это конкретная реализация этой схемы. Таким образом, метод, который является частью класса, будет повторяться в объектах, которые создают экземпляр этого класса. Аналогичным образом, если вы создаете новый класс из уже существующего класса, новый класс унаследует методы ранее существовавшего класса. Новый класс в этом сценарии называется «дочерним классом», а ранее существовавший класс называется «родительским классом».

Создание подкласса

Во всех случаях результат был ожидаемым, хотя типы данных были различными. Полиморфизм подтипов является одним из основных принципов объектно-ориентированного программирования, многие реализации которого базируются на неверном представлении о нем. Новый содержит те же поля и классы, но в его теле указываются только новые (ранее не используемые) поля и методы. Возможность многократно использовать один и тот же код для создания новых делает процесс программирования более удобным, быстрым и простым. Благодаря полиморфизму интерпретатор питона автоматически распознаёт, что метод fact() для объекта a(класса Square) переопределён. Здесь мы можем увидеть, что такие методы как __str__(), которые не были переопределены в дочерних классах, используются из родительского класса.

Попробуйте запустить код из приведенных ниже примеров, чтобы увидеть полиморфизм в действии! Мы будем использовать +оператор для сложения целых чисел 2и 3при объединении строк «2«и «3». С другой стороны, поскольку метод info для объекта krug не переопределяется, он используется из родительского класса Shape. Сегодня вы узнаете что такое полиморфизм, о различных типах полиморфизма и о том, как мы можем реализовать их в Python с помощью реальных примеров.

Полиморфизм операторов

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

  • Однако очевидно, что для разных типов аналогичные по принципу действия методы должны функционировать по-разному.
  • В это же самое время, метод fact() для объекта b переопределенным не является, в результате чего применяется метод с таким же именем из parent class (Shape).
  • Python — один из самых популярных языков программирования благодаря своей универсальности и удобному синтаксису.
  • Последовательность букв на странице не меняется, но смысл, который они добавляют к предложению, в каждом случае принципиально разный.
  • Затем создайте
    два подкласса Desktop и Laptop, которые наследуют атрибуты и методы Computer и
    реализуют свои собственные версии метода run().

В Python есть некоторые функции, которые могут принимать аргументы разных типов. Для целочисленного типа данных оператор + используется чтобы сложить операнды. Итак, из этого
занятия я, думаю, вы поняли, что из себя представляет полиморфизм и как он
реализуется на Python. Также узнали, как можно определять
методы, которые ведут себя подобно абстрактным с необходимостью их
переопределения в дочерних классах.

Полиморфизм времени компиляции или перегрузка метода?

Отметим, в Python также есть правосторонний метод перегрузки сложения – __radd__. Затем попробуйте использовать len()функцию для измерения длины строки «numbers»и списка [«1″,»2″,»3»,»4«]. Вся информация используется исключительно в ознакомительных целях. Он реализует функциональность только на том уровне, на котором она известна на данный момент.

В результате мы получили строковое представление этих объектов. Полиморфизм хорош тем, что позволяет создавать новые классы, логически очень похожие на базовые. В начале статьи мы привели простой пример, который продемонстрировал, как сильно облегчает разработку использование абстракций. То есть работать с новостями можно так же как с объявлениями или статьями. Кроме того, на практике подтипы имеют прочную связь с наследованием, несмотря на то, что обычно они упоминаются отдельно друг от друга. К примеру, чтобы создать подтип В от А, нужно наследовать его от А, как это представлено на картинке.