Расскажи про три типа инкапсуляции в Python
Python
Junior
Без компании
Расскажи про три типа инкапсуляции в Python
Ответы
В Python инкапсуляция реализуется через соглашения об именовании и механизмы доступа.
- **Public** – атрибуты доступны везде. По умолчанию все атрибуты публичные.
```
class Example:
def __init__(self):
self.public_attr = 10
obj = Example()
print(obj.public_attr) # 10
```
- **Protected** – атрибуты с одним подчёркиванием `_`. Условно защищённые, доступны, но считаются внутренними.
```
class Example:
def __init__(self):
self._protected_attr = 20
obj = Example()
print(obj._protected_attr) # 20 (но не рекомендуется)
```
- **Private** – атрибуты с двумя подчёркиваниями `__`. Интерпретатор искажает имя (`_ClassName__attr`), предотвращая прямой доступ.
```
class Example:
def __init__(self):
self.__private_attr = 30
obj = Example()
print(obj.__private_attr) # Ошибка! Доступ через obj._Example__private_attr
```
Важно: Python не запрещает доступ, а лишь усложняет его, следуя принципу "Мы все взрослые здесь".