> Какие атрибуты и методы считаются публичными и приватными в Python и как реализуется сокрытие данных? (Python)

Уровень: senior · Роль: backend · Язык: Python · Категория: Технические вопросы

Компании: ИП Калюков Николай Сергеевич

Стек: Python

> Пример ответа

В Python нет строгого механизма сокрытия данных, как в Java или C++. Вместо этого используются соглашения об именовании:

  • Публичные атрибуты и методы - без подчеркиваний в начале (например, self.name, def get_data()). Они доступны из любого места.
  • Защищённые (protected) - с одним подчеркиванием в начале (self._secret, def _internal()). Это соглашение, означающее "не трогай снаружи", но технически доступ остаётся.
  • Приватные (private) - с двойным подчеркиванием в начале (self.__hidden, def __private_method()). Python выполняет name mangling: имя преобразуется в _ClassName__hidden, что затрудняет случайный доступ, но не предотвращает его полностью.

Пример:

PYTHON
class BankAccount:
def __init__(self, balance):
self.balance = balance # публичный
self._currency = "RUB" # защищённый
self.__pin = "1234" # приватный
def __authenticate(self): # приватный метод
return True
def get_balance(self): # публичный метод
return self.balance
acc = BankAccount(1000)
print(acc.balance) # 1000
print(acc._currency) # "RUB" - работает, но не рекомендуется
# print(acc.__pin) # AttributeError
print(acc._BankAccount__pin) # "1234" - обход через name mangling

Сокрытие данных в Python реализуется через:

  1. Соглашения (одинарное подчеркивание) - для обозначения внутреннего API.
  2. Name mangling (двойное подчеркивание) - для предотвращения конфликтов имён при наследовании.
  3. Свойства (property) - для контроля доступа через геттеры/сеттеры, что даёт гибкость без ломки публичного интерфейса.

Итог: Python полагается на дисциплину разработчика, а не на жёсткую защиту.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью