Назад к вопросам
Junior — Middle
64
Можно ли реализовать инкапсуляцию данных в Python и как она достигается?
Ответ от нейросети
sobes.tech AI
В Python инкапсуляция достигается с помощью соглашений об именовании и механизмов ограничения доступа к атрибутам класса.
- Атрибуты и методы с одним подчёркиванием (
_attr) считаются защищёнными (protected) — это соглашение, что они не предназначены для внешнего использования. - Атрибуты с двумя подчёркиваниями (
__attr) вызывают манглинг имён (name mangling), что затрудняет доступ к ним извне и служит для создания приватных переменных.
Пример:
class MyClass:
def __init__(self):
self.public = 1
self._protected = 2
self.__private = 3
obj = MyClass()
print(obj.public) # 1
print(obj._protected) # 2 (но по соглашению не рекомендуется использовать)
# print(obj.__private) # Ошибка
print(obj._MyClass__private) # 3, доступ через манглинг
Хотя Python не имеет строгой приватности, такие механизмы помогают организовать инкапсуляцию и защитить данные от случайного доступа.