Обратите внимание, что в 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: Не все любят манипулирование именем. Попробуйте сбалансировать , чтобы избежать случайных конфликтов имен с потенциальным использованием продвинутых абонентов.
Поэтому, если вы не ожидаете, что подкласс случайно переопределит собственный метод с тем же именем, не используйте его.
Спасибо всем. Я нашел другую тему, которая полезна. http://stackoverflow.com/questions/70528/why-are-pythons-private-methods-not-actually-private – kurikintoki
Лучше: http://stackoverflow.com/questions/1301346/the-meaning-of-a- single-and-a-double-underscore-before-an-object-name-in-python – laffuste