#18 - Наследование, инкапсуляция, полиморфизм

#18 - Наследование, инкапсуляция, полиморфизм

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

Видеоурок

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


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

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


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

Предположим что у нас есть один большой класс «Транспорт». В классе описываются базовые характеристики для всех транспортных средств:

  • поля: скорость, вес, запас хода и тому подобное;
  • методы: получение информации из полей, установка новых значений;
  • конструктор: пустой и по установке всех полей.


На основе класса мы спокойно можем создать объект легковой машины, объект грузовика, объект самолета и так далее. У всех объектов будут одинаковые характеристики и методы. 


Мы явно понимаем, что у объекта машина и самолёт будут разные поля и характеристики. Как можно поступить:

  1. Можно создать два отдельных класса: «Car» и «Airplane». В каждом классе будут все методы, поля и конструкторы повторно переписанные из класса «Транспорт», а также будут новые методы, что важны только для конкретного класса;
  2. Можно создать два класса наследника: «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")

Исходный код

Классы и объекты
class Person:
	name = "Ivan"
	age = 10
	
	def __set(self, name, age):
		self.name = name
		self.age = age
		
class Student (Person):
	course = 1

igor = Student ()
igor._Person__set ("Igor", 19)
igor.course = 2
print (igor.course)

vlad = Person ()
vlad._Person__set ("Влад", 25)
print (vlad.name + " " + str(vlad.age))

ivan = Person ()
ivan._Person__set ("Иван", 56)
print (ivan.age)

Онлайн редактор кода

Загрузка...

Задание к уроку

Необходимо оформить подписку на проект, чтобы получить доступ ко всем домашним заданиям

Большое задание по курсу

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

Также стоит посмотреть

Изучение Flask / Создание сайта на Python
6 уроков
Изучение Python до профи / Основы, Django, TKinter
Создание игры на Python 3 с PyGame
5 уроков
Уроки Python Django / Создание сайта
12 уроков
Комментарии для сайта Cackle