Connect with us

Обучение

Заметки Python #15: Наследование, инкапсуляция, полиморфизм

318

 

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

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

Внутри класса можно создавать другие классы, а объекты нового класса могут наследовать свойства обоих классов. Продолжая параллель с алкоголем, это будет выглядеть так: мы создадим в напитках класс «juices» (соки) внутри класса «Drinks». Внутри нашего нового класса мы тоже можем использовать метод __init__ для того, чтобы добавить новое свойство в объект «Соки».

[code]

from constructor import Drinks # импортируем старые вводные для класса птиц (см.заметку 14)

class Juices (Drinks): # создаем класс «Соки», который наследует класс «Напитки»
type = «Это сок, братишка»

def __init__(self, glass=False): # добавляем новое свойство = стакан
self.name = «juice»
self.overall = self.liter * self.volume
self.glass = self.overall / 200 # количество стаканов считаем из рассчета общего литража и делением его на 200мл

print (Juices.type) # выводим на экран нашу фразу

whisky = Drinks(«Whisky», 2)
pepsi = Drinks(«Pepsi», 6)
juice = Juices () # мы можем сюда не передавать параметры Liter и Volume, т.к. они уже заложены в класс Drinks

print(whisky.name, pepsi.name, juice.name)
print(whisky.overall, pepsi.overall, juice.overall)
print(«Сколько стаканов сока у нас получится:», «%.0f» % juice.glass)

[/code]

 

Результат:

[adace-ad id=»3482″]

 

Инкапсуляция

Инкапсуляция позволяет запретить доступ к какому-либо свойству объекта везде, кроме как класса, где он прописан. Т.е. изменить свойство или служебную переменную мы не сможем — мы явно указываем, что она необходима для работы только внутри конкретного класса. Первый способ — рекомендательный. Для этого в переменной добавляется символ подчеркивания, например: _volume вместо volume.

Но, несмотря на это, поменять её всё равно можно, хотя среда программирования и будет говорить, что это т.н. protected member. Чтобы окончательно исключить возможность редактирования необходимо поставить два нижних подчеркивания. Тогда переназначить её уже не будет возможности (на самом деле, возможность есть, но это довольно сложно)

Нижнее подчеркивание необходимо добавить везде, где встречается данное свойство или переменная в классе

Полиморфизм

Полиморфизм — разное поведение одного и того же метода в разных классах. Вот небольшой пример, как это работает в питоне:

[adace-ad id=»3475″]

 

[code]

class example1:
def sum (self, n):
self.result = n + 10

class example2:
def sum (self, n):
self.result = n + 20

score = example1()
score2 = example2()

score.sum(30) # вызываем метод sum из класса example1 для объекта score
score2.sum(30) # вызываем метод sum из класса example2 для объекта score2

print(score.result, score2.result) # результат в итоге разный

[/code]

 

Результат:

[adace-ad id=»3470″]

 

Нажмите что бы оставить комментарий

Ответить

Ваш адрес email не будет опубликован.

Лучшие сервисы стриминга музыки в 2019 году

Сервисы

Телевидение Wink Ростелеком: Samsung LG, Sony, Phillips, Android TV

Ростелеком

Ноутбуки Asus не видят жесткий диск. Автоматический вход в BIOS при старте

Гаджеты

LG WEB OS: приложения, обновления, настройка, проблемы со звуком

Гаджеты

Advertisement Яндекс.Метрика

Digital2.ru - Тренды, Профессии IT, WEB- разработка, Вакансии, Автоматизация, Цифровая экономика
Свободное копирование и распространение материалов с сайта Digital2.ru
разрешено только с указанием активной ссылки на Digital2 как на источник.
Copyright 2018 - 2020 © All rights reserved

OPGIO.COM

Connect