Как в Python реализована инкапсуляция классов
Python
Junior
Без компании
Как в Python реализована инкапсуляция классов
Ответы
В Python инкапсуляция реализована через соглашения об именовании, а не строгие модификаторы доступа.
- **Публичные** атрибуты: обычные имена (`var`)
- **Защищённые** (protected): одно подчёркивание (`_var`). Это соглашение, что атрибут не предназначен для внешнего использования, но доступ остаётся.
- **Приватные** (private): два подчёркивания (`__var`). Интерпретатор искажает имя (`_ClassName__var`), что затрудняет доступ извне, но не блокирует полностью.
Пример:
```
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._MyClass__private) # 3 (обход приватности)
```
Для управления доступом используют декораторы `@property`, `@attr.setter`.