Sobes.tech
Back to questions
Junior — Middle
53

Какое отличие между одним и двумя подчеркиваниями в именах переменных или методов?

Answer from AI

sobes.tech AI

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

Двойное подчеркивание в начале имени (например, __variable) активирует механизм name mangling — изменение имени переменной для предотвращения конфликтов имен в подклассах. Python изменяет имя переменной, добавляя к нему имя класса, что затрудняет прямой доступ к ней извне.

Пример:

class MyClass:
    def __init__(self):
        self._protected = 1       # внутреннее использование
        self.__private = 2        # имя изменится на _MyClass__private

obj = MyClass()
print(obj._protected)          # доступ возможен
# print(obj.__private)         # вызовет ошибку AttributeError
print(obj._MyClass__private)   # доступ через name mangling возможен