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

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

Что такое полиморфизм python. Смотреть фото Что такое полиморфизм python. Смотреть картинку Что такое полиморфизм python. Картинка про Что такое полиморфизм python. Фото Что такое полиморфизм python

Введение

Примеры

Основной полиморфизм

Мы должны увидеть этот вывод:

Что происходит без полиморфизма? Без полиморфизма может потребоваться проверка типа перед выполнением действия над объектом, чтобы определить правильный метод для вызова. Следующий пример счетчика выполняет ту же задачу, что и предыдущий код, но без использования полиморфизма, то get_area() функция должна делать больше работы.

Мы должны увидеть этот вывод:

Duck Typing

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

Quaaaaaack! \ У утки белые и серые перья. \ Человек подражает утке. \ Человек берет перо с земли и показывает его.

Синтаксис

Параметры

Примечания

Что такое полиморфизм python. Смотреть фото Что такое полиморфизм python. Смотреть картинку Что такое полиморфизм python. Картинка про Что такое полиморфизм python. Фото Что такое полиморфизм python

Научим основам Python и Data Science на практике

Это не обычный теоритический курс, а онлайн-тренажер, с практикой на примерах рабочих задач, в котором вы можете учиться в любое удобное время 24/7. Вы получите реальный опыт, разрабатывая качественный код и анализируя реальные данные.

Источник

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

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

Это позволяет функциям или аргументам использовать сущности разных типов в разное время.

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

Что такое полиморфизм python. Смотреть фото Что такое полиморфизм python. Смотреть картинку Что такое полиморфизм python. Картинка про Что такое полиморфизм python. Фото Что такое полиморфизм python

Реализация полиморфизма в Python с помощью класса

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

Пример с классами и объектами

Эта функция определяет возраст Кролика. Эта функция определяет цвет Кролика. Эта функция определяет возраст Лошади. Эта функция определяет цвет Лошади.

Реализация с наследованием

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

Пример

Различные виды животных Возраст животного. Различные виды животных Возраст кролика. Различные виды животных Возраст лошади.

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

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

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

Перегрузка оператора в Python

Python поддерживает перегрузку операторов. Это еще один тип полиморфизма, при котором оператор ведет себя по-разному в зависимости от типа операндов.

Источник

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

В этой статье мы изучим полиморфизм, разные типы полиморфизма и рассмотрим на примерах как мы можем реализовать полиморфизм в Python.

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

В буквальном значении полиморфизм означает множество форм.

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

Давайте посмотрим на пример:

Пример 1: полиморфизм оператора сложения

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

Для целочисленного типа данных оператор + используется чтобы сложить операнды.

Подобным образом оператор + для строк используется для конкатенации.

Здесь мы можем увидеть единственный оператор + выполняющий разные операции для различных типов данных. Это один из самых простых примеров полиморфизма в Python.

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

В Python есть некоторые функции, которые могут принимать аргументы разных типов.

Пример 2: полиморфизм на примере функции len()

Вывод:

Что такое полиморфизм python. Смотреть фото Что такое полиморфизм python. Смотреть картинку Что такое полиморфизм python. Картинка про Что такое полиморфизм python. Фото Что такое полиморфизм pythonПолиморфизм функции len()

Полиморфизм в классах

Полиморфизм — очень важная идея в объектно-ориентированном программировании.

Чтобы узнать больше об ООП в Python, посетите эту статью: Python Object-Oriented Programming.

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

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

Пример 3: полиморфизм в методах класса

Вывод:

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

Как и в других языках программирования, в Python дочерние классы могут наследовать методы и атрибуты родительского класса. Мы можем переопределить некоторые методы и атрибуты специально для того, чтобы они соответствовали дочернему классу, и это поведение нам известно как переопределение метода(method overriding).

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

Давайте рассмотрим пример:

Пример 4: переопределение метода

Вывод:

Благодаря полиморфизму интерпретатор питона автоматически распознаёт, что метод fact() для объекта a (класса Square ) переопределён. И использует тот, который определён в дочернем классе.

С другой стороны, так как метод fact() для объекта b не переопределён, то используется метод с таким именем из родительского класса( Shape ).

Что такое полиморфизм python. Смотреть фото Что такое полиморфизм python. Смотреть картинку Что такое полиморфизм python. Картинка про Что такое полиморфизм python. Фото Что такое полиморфизм pythonПолиморфизм на примере дочерних и родительских классов в питоне

Заметьте, что перегрузка методов(method overloading) — создание методов с одним и тем же именем, но с разными типами аргументов не поддерживается в питоне.

Источник

Полиморфизм в классах Python 3

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

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

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

Данное руководство научит вас применять полиморфизм в классах Python.

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

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

Полиморфизм в Python основан на утиной типизации. Термин «утиная типизация» (также неявная типизация, или латентная типизация) произошёл от цитаты «Если это выглядит как утка, плавает как утка и крякает как утка, то это, возможно, и есть утка». Утиная типизация подразумевает определение пригодности объекта для конкретной цели. При использовании обычной типизации эта пригодность определяется типом объекта в отдельности, но в утиной типизации для этого используются методы и свойства рассматриваемого объекта. Иными словами, нужно проверить, крякает ли объект как утка, а не спрашивать, является ли объект уткой.

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

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

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

Создайте файл polymorphic_fish.py и добавьте в него классы Shark и Clownfish с методами swim(), swim_backwards() и skeleton().

class Shark():
def swim(self):
print(«The shark is swimming.»)
def swim_backwards(self):
print(«The shark cannot swim backwards, but can sink backwards.»)
def skeleton(self):
print(«The shark’s skeleton is made of cartilage.»)
class Clownfish():
def swim(self):
print(«The clownfish is swimming.»)
def swim_backwards(self):
print(«The clownfish can swim backwards.»)
def skeleton(self):
print(«The clownfish’s skeleton is made of bone.»)

Классы Shark и Clownfish используют три одноименных метода с разной функциональностью.

На основе классов создайте объекты:

.
wally = Shark()
wally.skeleton()
casey = Clownfish()
casey.skeleton()

python polymorphic_fish.py
The shark’s skeleton is made of cartilage.
The clownfish’s skeleton is made of bone.

Итак, теперь у вас есть два объекта с общим интерфейсом.

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

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

.
wally = Shark()
casey = Clownfish()
for fish in (wally, casey):
fish.swim()
fish.swim_backwards()
fish.skeleton()

Теперь у вас есть два объекта, wally из класса Shark и casey из класса Clownfish. Цикл for итерирует методы swim(), swim_backwards() и skeleton() каждого объекта.

Запустите программу. Она выведет:

The shark is swimming.
The shark cannot swim backwards, but can sink backwards.
The shark’s skeleton is made of cartilage.
The clownfish is swimming.
The clownfish can swim backwards.
The clownfish’s skeleton is made of bone.

Цикл for сначала итерировал объект класса Shark, а затем объект класса Clownfish.

Как видите, Python использует эти методы, не зная точно, к какому классу относится каждый из них.

Полиморфизм в функциях

Также можно создать функцию для работы с объектами.

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

Вызовите методы swim(), каждый из которых определён в отдельном классе.

def in_the_pacific(fish):
fish.swim()

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

.
def in_the_pacific(fish):
fish.swim()
wally = Shark()
casey = Clownfish()
in_the_pacific(wally)
in_the_pacific(casey)

При запуске программы вы получите такой вывод:

The shark is swimming.
The clownfish is swimming.

Несмотря на то, что в функции in_the_pacific() указан случайный объект fish, функция смогла правильно обработать классы.

Источник

Наследование и полиморфизм в Python

Что такое полиморфизм python. Смотреть фото Что такое полиморфизм python. Смотреть картинку Что такое полиморфизм python. Картинка про Что такое полиморфизм python. Фото Что такое полиморфизм python

Наследование

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

Информатика использует понятие наследования при создании классов, между которыми устанавливаются отношения “род-вид”. В отношениях “род-вид” один объект связан с другим объектом. Например, собака — это домашнее животное, сельдерей — овощ, а Марс — планета. В отношениях “род-вид” есть две сущности: родитель и ребенок. Родитель в этих отношениях является общей версией ребенка. Собака (ребенок) — это домашнее животное (родитель). В информатике мы называем родительский класс в отношениях “род-вид” “суперклассом”, а дочерний — “подклассом”. Подкласс наследует методы и/или переменные от суперкласса. Теперь напишем код для отношений dog/pet (собака/домашнее животное).

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

Некоторые атрибуты класса могут быть созданы закрытыми. Создать переменную закрытой означает, что этот атрибут не будет доступен подклассу. Имейте это в виду при проектировании классов!

Полиморфизм

Теперь, когда вы получили представление о наследовании, можно перейти к понятию “полиморфизм”. Полиморфизм — это способность чего-либо иметь несколько форм. Вернемся к предыдущему примеру. Все домашние животные в конечном итоге нуждаются в еде, но способ, которым они питаются, может отличаться. Например, попугай будет есть, клюя корм для птиц, в то время как собака будет есть, пережевывая собачий корм. И попугай, и собака — домашние животные, которые едят пищу, но разница в том, что они едят разную пищу по-разному. Взглянем на пример в коде.

Заключение

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

Источник

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

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