Назад к подготовке

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.
  • Подчеркни, что это не защита данных.