Двойное подчёркивание в Python не делает атрибут приватным Новички… — Точка входа в программирование — TG.ME

Двойное подчёркивание в Python не делает атрибут приватным

Новички часто пишут self.__value и думают, что закрыли поле от внешнего мира. На самом деле Python просто переименовывает его: внутри класса Helper атрибут __value превращается в _Helper__value. Это называется name mangling, и обойти его можно, написав это длинное имя руками.

Ловушка глубже, чем кажется. Переименование зависит только от имени класса, не от модуля. Если два независимых класса в разных файлах называются Helper и оба хранят __value, а кто-то наследуется от обоих, поля сталкиваются в одном и том же _Helper__value: один класс кладёт туда строку, другой число, и код падает с TypeError на сложении. Именно такой пример разбирают сейчас на форуме разработчиков Python, обсуждая, нужна ли языку настоящая приватность.

Что с этим делать сегодня. Одно подчёркивание _value честно говорит «не трогай снаружи» и ничего не переименовывает. А если два класса должны хранить своё состояние независимо, чаще безопаснее не наследоваться от обоих, а держать их объекты внутри как поля.

#python #основы
🆒1
September 2, 2026 399 1 1