Много говорить и много сказать не есть одно и то же (Софокл).

Как применить полиморфизм к классам в Python 3

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...

Статья опубликована: 15 апреля 2017

Как применить полиморфизм к классам в Python 3

Введение

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

Для объектно-ориентированного программирования в Python, это означает, что конкретный объект, принадлежащий к определенному классу может быть использован таким же образом, как если бы это был другой объект, принадлежащий к другому классу.

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

Этот учебник будет описывать применение полиморфизма на классы в Python.

Что такое полиморфизм?

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

Полиморфизм в Python использует язык программирования по утиной типизации. Термин «утиная типизация» происходит от цитаты писателя Джеймс Уитком Рили: «Когда я вижу птицу, которая ходит как утка и плавает как утка и крякает как утка, я называю эту птицу уткой.» Компьютерный инженер Алекс Мартелл в сообщении на конференции comp.lang.python, использование утиной типизации касается установления пригодности объекта для конкретной цели. При использовании нормальной печати эта пригодность определяется типом только объекта, но с уткой собрав наличие методов и свойств, используется для определения пригодности, а не фактический тип рассматриваемого объекта. То есть, вы проверяете крякает ли объект как утка и ходит как утка, а не спрашиваете объект, утка ли это.

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

Создание полиморфных классов

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

Мы создадим класс Shark и класс Clownfish, каждый из которых будет определять методы swim(), swim_backwards() и skeleton().

polymorphic_fish.py
 

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

Давайте создадим экземпляр этих классов на два объекта:

polymorphic_fish.py
 

При запуске программы на python с командой polymorphic_fish.py, мы можем видеть, что каждый объект ведет себя, как и ожидалось:

Вывод
 

Теперь, когда у нас есть два объекта, которые используют общий интерфейс, можно использовать два объекта таким же образом, независимо от их отдельных видов.

Полиморфизм с методами класса

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

polymorphic_fish.py
 

У нас есть два объекта, sammy из класса Shark, и casey из класса Clownfish. Наш цикл for повторяет через эти объекты, вызов методов swim(), swim_backwards() и skeleton().

При запуске программы, вывод будет выглядеть следующим образом:

Вывод
 

Цикл for повторяет сначала sammy из класса Shark, а потом объект casey из класса Clownfish, поэтому мы видим методы, относящихся к классу Shark, и к классу Clownfish.

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

Полиморфизм с функцией

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

Давайте создадим функцию с именем in_the_pacific() которая принимает в качестве объекта fish. Хотя мы используем имя fish, любой экземпляр объекта будет в состоянии назвать в этой функции:

polymorphic_fish.py
 

Далее, мы дадим функции что – то делать, что использует объект fish. В этом случае мы будем вызывать метод swim(), который определен в двух классах Shark и Clownfish:

polymorphic_fish.py
 

Далее, мы создадим экземпляр обоих классов Shark и Clownfish, если у нас их нет еще. Теперь, мы можем вызвать, используя ту же функцию in_the_pacific():

polymorphic_fish.py
 

При запуске программы, вывод будет выглядеть следующим образом:

Вывод
 

Даже если мы прошли случайный объект ( fish) в функцию in_the_pacific() при определении его, мы все еще были в состоянии эффективно использовать его для конкретизации из классов Shark и Clownfish. Объект casey вызвал метод swim(), определенный в классе Clownfish, и объект sammy, вызываемый метод swim(), определенный в классе Shark.

Вывод

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


Читайте также

Добавить комментарий

Войти с помощью: 

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

badge
Обратный звонок 1
Отправить
galka

Спасибо! Ваша заявка принята

close
galka

Спасибо! Ваша заявка принята

close