Ответ 1
Из документа Python Class:
Частные переменные экземпляра, к которым невозможно получить доступ, кроме как изнутри объекта, не существует в Python. Однако существует соглашение, за которым следует большинство кода Python: имя с префиксом подчеркивания (например, _spam) должно рассматриваться как непубличная часть API (будь то функция, метод или элемент данных). Она должна рассматриваться как деталь реализации и может быть изменена без уведомления.
Так как существует допустимый прецедент для членов класса и частного лица (а именно, чтобы избежать столкновения имен имен с именами, определенными подклассами), существует ограниченная поддержка такого механизма, называемого mangling. Любой идентификатор формы __spam (по крайней мере два ведущих символа подчеркивания, не более одного нижнего подчеркивания) заменяется текстовым символом _classname__spam, где classname - это текущее имя класса с разделительными подчеркиваниями. Это манипулирование выполняется независимо от синтаксического положения идентификатора, если оно встречается в определении класса.