Python использует соглашения об именовании для определения трёх уровней контроля доступа к атрибутам и методам класса. В отличие от некоторых других языков, Python не навязывает строгие ограничения доступа — он полагается на дисциплину разработчика.
Атрибуты и методы без префикса подчеркивания (например, name) являются публичными.
Атрибуты с префиксом одного подчеркивания (например, _name) являются защищёнными.
Атрибуты с префиксом двух подчеркиваний (например, __name) являются приватными.
_ClassName__nameclass Example:
def __init__(self):
self.public = "accessible anywhere"
self._protected = "internal use only"
self.__private = "name-mangled"
| Уровень | Синтаксис | Доступен снаружи |
|---|---|---|
| Public | name | ✅ Да |
| Protected | _name | ✅ Да (по соглашению, избегай) |
| Private | __name | ⚠️ Только через _Class__name |
Контроль доступа в Python основан на соглашениях, а не на принуждении. Двойное подчеркивание обеспечивает самое сильное практическое ограничение благодаря перекомпоновке имён (name mangling), но настоящая инкапсуляция в конечном счёте зависит от договорённостей внутри команды.
Python строго запрещает доступ к приватным атрибутам с двойным подчёркиванием, делая их полностью недоступными извне класса.
Новый — ещё не проверен сообществом
Вы