Sobes.tech
Back to questions
Junior — Middle
65

Можно ли реализовать инкапсуляцию данных в Python и как она достигается?

Answer from AI

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 не имеет строгой приватности, такие механизмы помогают организовать инкапсуляцию и защитить данные от случайного доступа.