Sobes.tech
Back to questions
Junior — Middle
50

Можно ли получить доступ к приватным переменным и методам в Python, и как это реализуется?

Answer from AI

sobes.tech AI

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

  • Одинарное подчеркивание _var — это просто соглашение, что переменная или метод являются внутренними и не предназначены для использования вне класса.
  • Двойное подчеркивание __var запускает механизм name mangling, который изменяет имя переменной внутри класса, чтобы затруднить к ней доступ извне.

Тем не менее, получить доступ к таким "приватным" переменным можно, зная их изменённое имя. Например:

class MyClass:
    def __init__(self):
        self.__private_var = 42

obj = MyClass()
# Прямой доступ вызовет ошибку:
# print(obj.__private_var)  # AttributeError

# Но можно обратиться через name mangling:
print(obj._MyClass__private_var)  # Выведет 42

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