Private attributes и name mangling в Python
Что означают _attr и __attr в Python class, и чем convention отличается от name mangling?
Ответить самому
Сначала сформулируйте ответ как на собеседовании, затем откройте разбор и оцените себя.
Короткий ответ
_attr - convention: internal use. __attr запускает name mangling в _ClassName__attr, чтобы снизить риск случайного override.Полный разбор
В Python нет настоящих private fields как в некоторых языках. Один underscore _name - соглашение: это internal implementation detail, но доступ технически открыт.
Два underscores __name включают name mangling: внутри класса атрибут превращается примерно в _ClassName__name. Это помогает избежать случайного конфликта имен в subclass, но не является security boundary.
Trailing double underscores вроде __init__ - отдельный случай: dunder methods, специальные протоколы Python.
Типичные ошибки
- Считать `__attr` настоящей приватностью.
- Путать `_attr`, `__attr` и `__dunder__`.
- Использовать name mangling без необходимости.
Как отвечать на собеседовании
- Скажи convention vs name mangling.
- Подчеркни, что это не защита данных.