Ответ 1
Обратите внимание, что в Python нет такой вещи, как "частный метод". Двойное подчеркивание - это только название:
>>> class A(object):
... def __foo(self):
... pass
...
>>> a = A()
>>> A.__dict__.keys()
['__dict__', '_A__foo', '__module__', '__weakref__', '__doc__']
>>> a._A__foo()
Таким образом, префикс __
полезен, когда вам нужно, чтобы возникла манипуляция, например, чтобы не столкнуться с именами вверх или ниже цепочки наследования. Для других целей, одно подчеркивание будет лучше, ИМХО.
EDIT, относительно путаницы на __
, PEP-8 совершенно ясно:
Если ваш класс предназначен для подкласса, и у вас есть атрибуты что вы не хотите использовать подклассы, рассмотрите их двойные ведущие подчеркивания и отсутствие подчеркивания подчеркивания. Это вызывает Алгоритм переименования имен Python, где имя класса искалеченное в имя атрибута. Это помогает избежать имени атрибута столкновения должны подклассы непреднамеренно содержать атрибуты с то же имя.
Примечание 3: Не все любят манипулирование именами. Попробуйте сбалансировать необходимо избегать случайных конфликтов имен с потенциальным использованием продвинутых абонентов.
Итак, если вы не ожидаете, что подкласс случайно переопределит собственный метод с тем же именем, не используйте его.