
#19 – Наследование, инкапсуляция, полиморфизм
Видеоурок
Что такое наследование, инкапсуляция и полиморфизм мы уже рассказывали в
Наследование
Наследование является одним из ключевых понятий ООП. За счёт наследования можно создать один общий класс (класс родитель) и создать множество других классов (классы наследники), что будут наследовать все поля, методы и конструкторы из главного класса.
Зачем использовать наследование?
Предположим что у нас есть один большой класс «Транспорт». В классе описываются базовые характеристики для всех транспортных средств:
- поля: скорость, вес, запас хода и тому подобное;
- методы: получение информации из полей, установка новых значений;
- конструктор: пустой и по установке всех полей.
На основе класса мы спокойно можем создать объект легковой машины, объект грузовика, объект самолета и так далее. У всех объектов будут одинаковые характеристики и методы.
Мы явно понимаем, что у объекта машина и самолёт будут разные поля и характеристики. Как можно поступить:
- Можно создать два отдельных класса: «Car» и «Airplane». В каждом классе будут все методы, поля и конструкторы повторно переписанные из класса «Транспорт», а также будут новые методы, что важны только для конкретного класса;
- Можно создать два класса наследника: «Car» и «Airplane». Оба класса будут наследовать всё от класса «Транспорт» и при этом будут содержать свои дополнительные функции. Таким образом повторения кода не будет и код станет меньше и чище.
Создание классов наследников
Для создания класса наследника требуется создать класс и указать наследование от главного класса.
Пример класса наследника:
class Cars:
wheels = 4 # Общее значение для всех объектов,
# так как все машины имеют колеса
class BMW (Cars):
is_m_serias = true # Является ли модель "М" серии?
# Переменная нужна только в классе BMW
Инкапсуляция
Инкапсуляция позволяет ограничить доступ к какой-либо функции в классе. Благодаря такому подходу злоумышленники или же мы сами не сможем случайно или намерено вызвать или изменить метод.
Пример:
class Some:
def _printWords(self):
print ("Попробуй меня вызвать")
obj = Some()
obj._printWords() # Вызов функции ничего не даст
При помощи двойного подчеркивания эффект защиты усиливается, поэтому вызвать функцию будет невозможным.
Полиморфизм
class Cars:
def nothing(self): # Пустая функция
pass
class BMW (Cars):
def nothing(self, word):
print (word + "!") # Функция теперь будет работать по новому
a = BMW()
a.nothing("Some")
Исходный код
Весь код будет доступен после подписки на проект!
Задание к уроку
Необходимо оформить подписку на проект, чтобы получить доступ ко всем домашним заданиям
Большое задание по курсу
Вам необходимо оформить подписку на сайте, чтобы иметь доступ ко всем большим заданиям. В задание входит методика решения, а также готовый проект с ответом к заданию.
PS: подобные задания доступны при подписке от 1 месяца
Также стоит посмотреть