В этой части учебника по Python, мы рассмотрим что такое инкапсуляция в Python 3 и права доступа.
Инкапсуляция в Python 3:
Давайте разберём что такое инкапсуляция, тут стоит отметить, что есть много различных терминов, но я расскажу тут самый популярный.
Инкапсуляция это связь данных с методом, то есть можно создать класс, в котором будет как минимум один метод и свойство, к такому методу будет применимо термин инкапсуляция.
Но если мы создадим класс с одними методами или свойствами, то в таком случае уже с натяжкой можно применять этот термин, а точнее вообще нельзя.
Права доступа в Python 3:
Теперь разберём что такое права доступа в Python, да и в других языках тоже, вы можете назначить разные права доступа свойствам и методам класса, всего их три типа:
- public — Публичный доступ, доступен всем и везде;
- private — Приватный доступ, доступен только внутри класса или объекта;
Это основные, но есть protected
, это что-то между public
и private
, но он редко используется, поэтому не будем его особо затрагивать.
Чтобы в Python назначить тип доступа private
, нужно перед названием свойства или метода поставить два нижних подчёркивания, для protected
, только одно, а public
, вообще не чего не надо, поэтому в классе по умолчанию всё имеет публичный доступ.
Пример:
Давайте для наглядности разберём не большой пример, что вы понимали, что случится если вызвать приватный метод или свойство вне объекта.
Вот сам пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | # Создаём класс class Car: # Создаём конструктор def __init__(self, marka, speed): # Назначаем свойство marka self.marka = marka # Назначаем приватное свойство speed self.__speed = speed # Выводим свойства через метод show_properties() self.show_properties() # Создаём метод show_properties() def show_properties(self): # Выводим свойство marka print(self.marka) # Выводим приватное свойство __speed print(self.__speed) def main(): # Создаём объект класса Car bmv = Car(marka="BMV", speed=200) bmv.show_properties() |
Как видите тут всё как в прошлом примере, только добавили приватное свойство __speed
, оно должно нормально выводится в констрикторе и в main()
когда вызываем метод show_properties()
, вот наглядное доказательство:
Как видите вывелось два раза, это всё из-за того, что мы вызываем метод show_properties()
два раза, сначала в конструкторе, а потом в main(), основной программе.
Теперь вместо show_properties()
, в основной программе, мы попробуем вывести просто свойство __speed
, вот что получиться:
То есть сразу выводится ошибка, и не даёт программисту взять это свойство, всё точно также работает и для методов.
Всё это нужно в первую очередь для безопасности, так как в программирование принято, что все свойства они приватные, особенно те которые очень важны для работы объекта, а брать или делать над ними какие либо действия, нужно через методы.
Методы как правила публичные, только опять же те которые не надо использовать вне объекта могут быть приватными.
Вывод:
В этой статье вы прочитали что такое инкапсуляция в Python 3 и права доступа, думаю вам было интересно.