КодимПроекты!: Изучаем Python через практические проекты Три принципа ООП: наследование и полиморфизм

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

Создайте базовый класс Aircraft (воздушное

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

судно) с атрибутами model, manufacturer и capacity. Затем создайте два
полиморфизм python
подкласса PassengerAircraft и CargoAircraft, которые наследуют атрибуты и
методы от Aircraft и реализуют свои собственные версии метода fly(). В

Объектно-ориентированное программирование Python (ООП в Python)

дополнение создайте класс Airport, который содержит список самолетов и имеет
полиморфизм python
метод takeoff(), вызывающий метод fly() для каждого самолета.

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

Причем, видя
полиморфизм python
ошибку NotImplementedError, мы понимаем,

ООП на Python: концепции, принципы и примеры реализации

что она связана именно с необходимостью  переопределения get_pr(), а не с

чем-то другим. Здесь мы используем переменную b, чтобы показать, что функция print() вызывает str() неявным образом, так как вывод значений обоих переменных одинаков. Заметьте, что перегрузка методов(method overloading) — ооп в python создание методов с одним и тем же именем, но с разными типами аргументов не поддерживается в питоне. В Python есть некоторые функции, которые могут принимать аргументы разных типов. Мы вызываем инициализатор класса Juice и в скобках передаём ему аргументы price и taste. Названия классов принято писать с прописной буквы, а объектов — со строчной.

В предыдущем уроке мы уже наблюдали полиморфизм между классами, связанными наследованием. У каждого может быть свой метод __init__() или square() или какой-нибудь другой. Какой именно из методов square() вызывается, и что он делает, зависит от принадлежности объекта к тому или иному классу. Например, два разных класса содержат метод total, однако инструкции каждого предусматривают совершенно разные операции. Так в примере ниже в классе T1 – это прибавление 10 к аргументу, в T2 – подсчет длины строки символов.

  • Например, помимо класса «Кошка», у нас есть никак не связанный с ним класс «Попугай» — и у обоих есть метод «спать».
  • В разных языках программирования реализация этого выглядит по-разному, но в основе база всегда одна.
  • Мы используем функцию super() перед методом __init__(), чтобы извлечь содержимое метода __init__() из родительского класса в дочерний.
  • В Python есть некоторые функции, которые совместимы для работы с несколькими типами данных.
  • Внутри они могут работать по-разному, но внешне всё будет выглядеть одинаково.

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

Чтобы реализовать полиморфизм, мы создали общий интерфейс. То есть, функцию flying_test(), которая может принимать любой объект. Затем https://deveducation.com/ мы передали объекты blu и peggy в функцию flying_test(). В приведенном выше примере мы определяем два метода sing() и dance().
Их называют методами экземпляра, так как они вызываются для экземпляра объекта, то есть для blu. После этого мы получаем доступ к атрибуту класса с помощью __class __.species. Точно так же мы получаем доступ к атрибутам экземпляра, используя blu.name и blu.age. Но атрибуты экземпляра уникальны для каждого экземпляра класса.
При помощи двойного подчеркивания эффект защиты усиливается, поэтому вызвать функцию будет невозможным. Хорошо известно, что оператор “+” нередко применяют в программах, написанных на Python. Отметим, в Python также есть правосторонний метод перегрузки сложения – __radd__.
Мы возьмём код из прошлой статьи и на её основе разберём три новых термина в ООП — инкапсуляцию, наследование и полиморфизм. В разных языках программирования реализация этого выглядит по-разному, но в основе база всегда одна. Методы __str__ и __repr__ отвечают за текстовое представление объекта. Метод __str__ вызывается, когда объект передается в функцию print или в форматированную строку, и служит для “неформального” представления объекта.

Leave a Reply

Your email address will not be published. Required fields are marked *