Mediumname-mangling

Что такое name mangling (__name)?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

Name mangling — имена __name (два подчёркивания, без двух в конце) внутри класса переписываются в _ClassName__name. Цель — избежать коллизий в наследовании.

class A:
    def __init__(self):
        self.__x = 1      # реально создаётся _A__x

class B(A):
    def __init__(self):
        super().__init__()
        self.__x = 2      # _B__x — не коллидирует с _A__x

a = A()
# a.__x      → AttributeError
a._A__x       # 1 (доступ есть, но convention против)
  • НЕ privacy — просто convention для avoid name clashes;
  • _name (одно подчёркивание) — convention для «protected/internal», тоже не enforced;
  • __name__ (два в конце) — magic (dunder) методы, не mangling;
  • На практике mangling редко полезен, обычно _name достаточно.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.