Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # coding: cp1251
- # ИНКАПСУЛЯЦИЯ - скрытие деталей реализации класса
- # все атрибуты по умолчанию являются публичными
- # атрибуты имена которых начинаются с одного знака подчеркивания (_) говорят программисту о том что они относятся ко внутренней реализации класса и не должны использоваться извне, однако никак не защищены
- # атрибуты имена которых начинаются но не заканчиваются двумя символами подчеркивания считаются приватными к ним применяется механизм "name manling" он не предполагает защиты данных от изменения извне, так как к ним всё равно можно обратится, зная имя класса и то, как Python изменяет имена приватных атрибутов, однако позволяет защитить их от случайного переопределения в классах потомках
- class MyObject: # создадим класс
- def __init__(self): # в нем создадим конструктор
- self.__private_attribute = 42 # в конструкторе создадим атрибут
- def get_private(self): # сдеалем метод геттер который будет
- print(self.__private_attribute) # возвращать наш атрибут
- obj = MyObject() # создадим экземпляр класса
- print(obj.get_private()) # 42 # проверим чему равен метод get_private() - всё верно - 42
- # obj.__private_attribute # такой метод выдаст ошибку (MyObject instance has no attribute '__private_attribute')
- print(obj._MyObject__private_attribute) # потому что на самом деле он называется вот так
Advertisement
Add Comment
Please, Sign In to add comment