Что такое наследование в python

Введение в Python

Поиск

Новое на сайте

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

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

При создании нового объекта (класса), как в программировании, так и в реальной жизни, мы можем использовать 2 подхода:

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

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

Для проверки создадим экземпляр класса дерево и немного поиграем с ним.

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

Теперь представим, что наша задача усложняется: нам необходимо добавить класс фруктового дерева, у которого будут те же атрибуты и методы, но в дополнение появится метод сбора урожая фруктов. Конечно, мы можем создать с нуля класс FruitTree и переписать наново весь код, который будет практически идентичен тому что мы уже написали, но это будет неэффективно, кроме того, нарушается принцип DRY (Don’t Repeat Yourself). Вместо этого мы можем воспользоваться наследованием, то есть создать класс FruitTree и указать ему в качестве родителя класс Tree. Таким образом, FruitTree получит доступ ко всем атрибутам и методам, которыми обладает класс Tree.

Как указать родительский класс в Python.

Родительский класс помещается в скобки после имени класса.

Таким образом, наш код для класса фруктового дерева будет следующим:

Создадим экземпляр класса FruitTree:

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

Зачем использовать наследование.

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

Источник

BestProg

Python. Наследование в классах. Правила применения наследования. Примеры

Содержание

Поиск на других ресурсах:

1. Реализация наследования в классах. Общие положения

Как и в других языках программирования, в языке Python реализован механизм наследования. Наследование — это возможность расширения (наследования) ранее написанного программного кода класса с целью дополнения, усовершенствования или привязки под новые требования.

Наследование позволяет создавать иерархии классов. В этих иерархиях классы верхних уровней представляют наиболее обобщенные атрибуты, а классы нижних уровней (подклассы) реализуют более подробную специализацию атрибутов. Иерархии классов образуют дерево иерархии, в котором чем ниже находится класс, тем больше он является специализированным.

Если один класс наследует (расширяет) другой класс, то этот класс называется подкласс. А класс, который наследуется, называется суперкласс.

2. Правила, определяющие работу механизма наследования в Python. Примеры

В языке Python наследование реализуется с соблюдением следующих правил.

2.1. Правило 1. Указание имени суперкласса

Пример.

2.2. Правило 2. Наследование атрибутов суперкласса подклассом

Подкласс наследует атрибуты своих суперклассов.

Пример.

После запуска на выполнение программа выдала следующий результат

2.3. Правило 3. Наследование атрибутов суперкласса экземпляром подкласса

Результат выполнения программы

2.4. Правило 4. Обращение к атрибуту суперкласса из экземпляра класса

Чтобы доступиться к атрибуту суперкласса из экземпляра класса, нужно выполнить обращение вроде

Такое обращение включает в себя:

Примеры использования данного правила приведены в предыдущих двух правилах 3.

2.5. Правило 5. Изменения в подклассе не затрагивают суперкласс. Перегрузка атрибутов

Если в подклассе вносятся изменения, то эти изменения не затрагивают суперкласс. Это касается также замены имен суперклассов в подклассах, расположенных на более низких уровнях в дереве классов. В этом случае изменяется только унаследованное поведение. Замена атрибутов суперкласса за счет их переопределения в подклассах называется перегрузкой.

Результат выполнения программы

3. Пример использования наследования. Расширение класса Point к классу ColorPoint

В классе Point реализовать следующие атрибуты:

В подклассе PointColor реализовать следующие атрибуты:

Решение. Текст программы, решающий задачу, следующий.

Источник

Наследование — Python: Введение в ООП

Все классы, которые мы рассматривали до этого, создавались «с нуля». И до тех пор, пока описываемые классами сущности мало похожи друг на друга, создание абсолютно новых классов работает отлично. Но что делать, если мы хотим, чтобы пара классов содержала один и тот же метод — не одноимённый, а именно копию?

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

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

Когда один класс становится наследником другого, то все атрибуты класса-предка (надкласса, superclass) становятся доступны классу-потомку (подклассу, subclass) — наследуются (достаются в наследство).

Что даёт наследование

Наследование позволяет выделить общее для нескольких классов поведение и вынести его в отдельную сущность. То есть наследование является средством переиспользования кода (code reuse) — использования существующего кода для решения новых задач!

Наследование позволяет получить новый класс, немного отличающийся от старого. При этом нам не нужно иметь доступ к коду исходного класса, а значит с помощью наследования мы можем адаптировать под наши задачи (использовать повторно!) в том числе и чужие классы!

Как обычно, рассмотрим пример:

Здесь вы можете увидеть сходство с взаимоотношениями между классом и его экземпляром: если экземпляр получает свой собственный атрибут, то этот атрибут заменяет атрибут класса. Точно так же объявления в классе-потомке заменяют собой атрибуты класса-предка, если имя используется то же самое — говорят, переопределяют (override).

И, как и в случае с объектом, который может использовать всё содержимое класса и заменять только небольшую часть атрибутов (или добавлять новые!), так и потомок по-умолчанию получает все атрибуты предка, часть из которых может изменить.

Всё будет super()

Тут нам на помощь приходит специальная функция super :

Вызов super вместо явного вызова предка хорош не только тем, что автоматически связывает методы. При смене предка (такое бывает) в описании класса super учтёт изменения и вы получите доступ к поведению нового предка. Удобно!

super работает не только с методами, но и с атрибутами классов:

Но важно помнить, что super работает именно с классами. Вы не сможете получить доступ к атрибутам, которые добавляются в объект уже после того, как тот будет создан!

Функция super так названа в честь названия класса-предка: «superclass».

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

В прошлом мы не указывали предка в объявлениях классов, то есть писали так:

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

Наши выпускники работают в компаниях:

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Источник

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

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

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

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

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

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

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

Полиморфизм

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

Заключение

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

Источник

Основы наследования в Python

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

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

В python производный класс может наследовать базовый класс, просто указав базу в скобках после имени производного класса. Рассмотрим следующий синтаксис, чтобы наследовать базовый класс в производный класс.

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

Класс может наследовать несколько классов, указав их все внутри скобок. Рассмотрим следующий синтаксис.

Многоуровневое наследование Python

Многоуровневое наследование возможно в Python, как и в других объектно-ориентированных языках. Архивируется, когда производный класс наследует другой производный класс. Нет ограничений на количество уровней, до которых многоуровневое наследование архивируется в python.

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

Синтаксис многоуровневого наследования приведен ниже.

Множественное наследование в Python

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

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

Синтаксис для выполнения множественного наследования приведен ниже.

Метод issubclass(sub, sup)

Метод issubclass(sub, sup) используется для проверки отношений между указанными классами. Он возвращает true, если первый класс является подклассом второго класса, и false в противном случае.

Рассмотрим следующий пример:

Метод isinstance(obj, class)

Метод isinstance() используется для проверки взаимосвязи между объектами и классами. Он возвращает true, если это первый параметр, а Obj является экземпляром второго параметра, т. е. классом.

Рассмотрим следующий пример.

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

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

Рассмотрим следующий пример, чтобы выполнить переопределение метода в Python.

Реальный пример переопределения метода –

Абстракция данных в Python

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

Источник

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

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