Как обратиться к приватному атрибуту Python без getter/setter?

У атрибута _name есть только соглашение о внутреннем использовании. Для __name Python применяет name mangling: обратиться можно как obj._ClassName__name.

Короткий ответ

Что ответить на собеседовании

У атрибута _name есть только соглашение о внутреннем использовании. Для __name Python применяет name mangling: обратиться можно как obj._ClassName__name.

Подробный разбор

Ответ с пояснениями

У атрибута _name есть только соглашение о внутреннем использовании. Для __name Python применяет name mangling: обратиться можно как obj._ClassName__name.

Например, class Vault: __code = 7 создаёт атрибут, доступный через Vault._Vault__code. Это не криптографическая защита и не абсолютный запрет доступа: преобразование имени прежде всего уменьшает случайные конфликты в наследовании.

В обычном коде обходить публичный интерфейс нежелательно — внутреннее имя может измениться без сохранения совместимости. Для нужного чтения лучше предусмотренное свойство или метод. Двойные подчёркивания с обеих сторон, как __len__, относятся к специальным именам и не означают такую приватность.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее