Sobes.tech
Back to questions
Junior — Middle
62

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

Answer from AI

sobes.tech AI

В Python скрытие данных внутри классов достигается с помощью соглашений и механизма именования атрибутов, а не строгого ограничения доступа, как в некоторых других языках.

  • Одно подчеркивание _variable обозначает, что атрибут или метод является защищённым (protected) и не предназначен для использования вне класса или его наследников. Это соглашение, а не запрет.
  • Двойное подчеркивание __variable запускает механизм name mangling (искажение имени), при котором имя атрибута изменяется внутри класса, чтобы затруднить доступ извне. Например, __var внутри класса MyClass становится _MyClass__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.__private)  # Ошибка AttributeError
print(obj._MyClass__private)  # 3 (доступ через name mangling)

Таким образом, в Python скрытие данных — это скорее договорённость и использование name mangling для усложнения прямого доступа.