Копаем ООП еще глубже. Сейчас мы разберемся с таким понятием как наследование свойств классов, узнаем, что такое инкапсуляция, а также приведем пример полиморфизма
Наследование
Внутри класса можно создавать другие классы, а объекты нового класса могут наследовать свойства обоих классов. Продолжая параллель с алкоголем, это будет выглядеть так: мы создадим в напитках класс «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]
Инкапсуляция
Инкапсуляция позволяет запретить доступ к какому-либо свойству объекта везде, кроме как класса, где он прописан. Т.е. изменить свойство или служебную переменную мы не сможем — мы явно указываем, что она необходима для работы только внутри конкретного класса. Первый способ — рекомендательный. Для этого в переменной добавляется символ подчеркивания, например: _volume вместо volume.
Но, несмотря на это, поменять её всё равно можно, хотя среда программирования и будет говорить, что это т.н. protected member. Чтобы окончательно исключить возможность редактирования необходимо поставить два нижних подчеркивания. Тогда переназначить её уже не будет возможности (на самом деле, возможность есть, но это довольно сложно)
Нижнее подчеркивание необходимо добавить везде, где встречается данное свойство или переменная в классе
Полиморфизм
Полиморфизм — разное поведение одного и того же метода в разных классах. Вот небольшой пример, как это работает в питоне:
[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]






































































