Достаточно часто встречаю вопросы о приватных полях и методах в Python от людей, которые раньше программировали на Java (или C++). Вот только в Python класс — это не совсем то же, что и в Java. В Python класс — это просто контейнер, содержимое которого доступно всем.

«Приватные» поля — это всего лишь договорённость по именам, которая никак не мешает работать с такими полями из любого места кода. Добавление имени класса к имени переменной — слабая защита.

Из этого вытекает пара правил использования подобных переменных:

  • Не особо рассчитывайте, что значение «приватной» переменной всегда будет правильным. Проверками в критичных местах системы не стоит пренебрегать.
  • Либо из имени переменной, либо из кода, её окружающего, либо из документации должно быть понятно, что она делает и какие методы доступа к ней использовать. Особенно актуально, если переменная — список или словарь.