Sobes.tech
Back to questions
Junior — Middle
64

Можете ли вы объяснить, что означает использование методов с именами, содержащими один или два подчеркивания в их названиях?

Answer from AI

sobes.tech AI

В Python имена методов или атрибутов с одним или двумя подчеркиваниями имеют особое значение:

  • Одинарное подчеркивание в начале имени (например, _method) — это соглашение, обозначающее, что метод или атрибут являются «защищёнными» (protected). Это не запрещает доступ извне, но сигнализирует, что использовать их напрямую не рекомендуется.

  • Двойное подчеркивание в начале имени (например, __method) запускает механизм name mangling (искажение имени). Это означает, что имя метода или атрибута изменяется интерпретатором, чтобы предотвратить случайное переопределение в подклассах. Например, __method внутри класса MyClass будет преобразовано в _MyClass__method.

  • Двойное подчеркивание в начале и конце имени (например, __init__) — это специальные методы Python, называемые «магическими» или «дуnder» (double underscore) методами. Они имеют особое поведение, определённое языком.

Пример:

class MyClass:
    def __init__(self):
        self._protected = 1
        self.__private = 2

    def __private_method(self):
        print("Это приватный метод")

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