Dmitry_Dronov

incaps_1

Mar 13th, 2016
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.08 KB | None | 0 0
  1. # coding: cp1251
  2. #  ИНКАПСУЛЯЦИЯ - скрытие деталей реализации класса
  3.  
  4. # все  атрибуты по умолчанию являются публичными
  5.  
  6. # атрибуты имена которых начинаются с одного знака подчеркивания (_) говорят программисту о том что они относятся ко внутренней реализации класса и не должны использоваться извне, однако никак не защищены
  7.  
  8. # атрибуты имена которых начинаются но не заканчиваются двумя символами подчеркивания считаются приватными к ним применяется механизм "name manling" он не предполагает защиты данных от изменения извне, так как к ним всё равно можно обратится, зная имя класса и то, как Python изменяет имена приватных атрибутов, однако позволяет защитить их от случайного переопределения в классах потомках
  9.  
  10. class MyObject: # создадим класс
  11.     def __init__(self): # в нем создадим конструктор
  12.         self.__private_attribute = 42 # в конструкторе создадим атрибут
  13.     def get_private(self): # сдеалем метод геттер который будет
  14.         print(self.__private_attribute) # возвращать наш атрибут
  15.  
  16. obj = MyObject() # создадим экземпляр класса
  17. print(obj.get_private()) # 42 # проверим чему равен метод get_private() - всё верно - 42
  18. # obj.__private_attribute # такой метод выдаст ошибку (MyObject instance has no attribute '__private_attribute')
  19. print(obj._MyObject__private_attribute) # потому что на самом деле он называется вот так
Advertisement
Add Comment
Please, Sign In to add comment