Sobes.tech
Назад к вопросам
Middle+
8

Как реализуется инкапсуляция в Python? Расскажи про модификаторы доступа.

Компании, где спрашивали
Ozon ФинтехOzon Финтех

Ответ от нейросети

sobes.tech AI

В Python инкапсуляция реализуется через соглашения об именовании и свойства классов, так как строгих модификаторов доступа, как в других языках (private, protected, public), нет.

  • Публичные атрибуты и методы — имена без подчеркиваний, доступны везде.
  • Защищённые (protected) — имена с одним ведущим подчеркиванием _var. Это соглашение, что атрибут или метод предназначен для внутреннего использования, но технически доступен извне.
  • Приватные (private) — имена с двумя ведущими подчеркиваниями __var. Python применяет манглинг имен (name mangling), изменяя имя атрибута внутри класса, чтобы затруднить доступ извне.

Пример:

class MyClass:
    def __init__(self):
        self.public = "доступно всем"
        self._protected = "рекомендуется не использовать вне класса и наследников"
        self.__private = "скрыто от прямого доступа"

obj = MyClass()
print(obj.public)        # работает
print(obj._protected)    # работает, но не рекомендуется
# print(obj.__private)   # вызовет ошибку
print(obj._MyClass__private)  # доступ через манглинг имен

Таким образом, инкапсуляция в Python — это скорее соглашение и механизм манглинга, а не строгие модификаторы доступа.