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

Что такое полиморфизм в Python Изучение

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

Сегодня мы обсудим полиморфизм и то, как он работает в Python.

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

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

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

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

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

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

Например, если +оперирует двумя целыми числами, результат является аддитивным, возвращая сумму двух целых чисел.

int1 = 10
int2 = 15
print(int1 + int2)
# returns 25

В приведенном выше примере +оператор добавляет 10и 15, так что на выходе получается 25.

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

str1 = «10»
str2 = «15»
print(str1 + str2)
# returns 1015

В этом случае результат получается 1015потому, что +оператор объединяет строки «10«и «15». Это один из примеров того, как один оператор может выполнять разные операции в разных контекстах.

Функциональный полиморфизм

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

Встроенная len()функция Python, например, может использоваться для возврата длины объекта. Однако длина объекта будет измеряться по-разному в зависимости от типа данных и структуры объекта. Например, если объект является строкой, len()функция вернет количество символов в строке. Если объект представляет собой список, он вернет количество записей в списке.

Вот пример того, как len()функция работает со строками и списками:

str1 = «animal»
print(len(str1))
# returns 6
list1 = [«giraffe»,»lion»,»bear»,»dog»]
print(len(list1))
# returns 4

Выходными данными являются 6и 4, соответственно, потому что len()функция подсчитывает количество символов в строке и количество записей в списке. Функция работает по-разному в зависимости от характера данных, с которыми она работает.

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

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

Вот пример родительского класса и производного от него дочернего класса. Обратите внимание, что родительский класс устанавливает метод type, поэтому дочерний класс наследует этот метод. Однако метод переопределяется в дочернем классе, так что объекты, созданные из дочернего класса, используют переопределенный метод. Это называется » переопределение метода «.

# Define parent class Animal
class Animal:
# Define method
    def type(self):
        print(«animal»)
# Define child class Dog
class Dog (Animal):
    def type(self):
        print(«dog»)
# Initialize objects
obj_bear = Animal()
obj_terrier = Dog()
obj_bear.type()
# returns animal
obj_terrier.type()
# returns dog

Имя метода typeостается прежним в дочернем классе, но оно было переопределено. Объект, созданный из родительского класса, будет использовать исходный метод, определенный в родительском классе, а метод, созданный из дочернего класса, будет использовать переопределенный метод. Таким образом, выходами программы выше являются animalи dog, соответственно.

Аналогичный принцип применяется к классам, которые независимы друг от друга. Например, представьте, что вы создаете два новых класса: Lionи Giraffe.

class Lion:
    def diet(self):
        print(“carnivore”)
class Giraffe:
    def diet(self):
        print(“herbivore”)
obj_lion=Lion()
obj_giraffe=Giraffe()
obj_lion.diet()
# returns carnivore
obj_giraffe.diet()
# returns herbivore

Выходные данные этой программы равны carnivoreи herbivore, соответственно. Оба класса используют имя метода diet, но определяют эти методы по-разному. Объект, созданный из Lionкласса, будет использовать метод, определенный в этом классе. У Giraffeкласса может быть метод с таким же именем, но объекты, созданные из Lionкласса, не будут с ним взаимодействовать.

Учебник по полиморфизму Python

Лучший способ освоить новый навык программирования — это попрактиковаться в нем. Попробуйте запустить код из приведенных ниже примеров, чтобы увидеть полиморфизм в действии! Во-первых, давайте попрактикуемся в полиморфизме операторов. Мы будем использовать +оператор для сложения целых чисел 2и 3при объединении строк «2«и «3».

int1 = 2
int2 = 3
print(int1+int2)
str1 = «2»
str2 = «3»
print(str1+str2)

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

str1=»numbers»
print(len(str1))
list1=[«1″,»2″,»3″,»4»]
print(len(list1))

Полиморфизм методов класса немного сложнее. В приведенном ниже блоке кода мы создали родительский класс Fishи определили метод класса type. Затем мы создали дочерний класс, вызываемый Sharkпри переопределении typeметода, чтобы объекты, созданные из Sharkкласса, использовали переопределенный метод.

class Fish:
       def type(self):
             print(«fish»)
class Shark(Fish):
      def type(self):
            print(«shark»)
obj_goldfish=Fish()
obj_hammerhead=Shark()
obj_goldfish.type()
obj_hammerhead.type()

Наконец, ниже мы создали два новых независимых класса: Turtleи Frog. Когда вы создаете экземпляр объекта из Turtleкласса, объект будет использовать typeметод, определенный в этом классе. То же самое будет верно и для объектов, созданных из Frogкласса, несмотря на то, что методы имеют одинаковое имя.

class Turtle:
    def type(self):
        print(«turtle»)
class Frog:
    def type(self):
        print(«frog»)
obj_sea_turtle=Turtle()
obj_treefrog=Frog()
obj_sea_turtle.type()
obj_treefrog.type()

Заключение

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

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

Читайте также:  Загрузить и прочитать файл Excel в Flask
Оцените статью
bestprogrammer.ru
Добавить комментарий