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 подскажет развёрнутый ответ в реальном времени.