Au contraire, double underscore does make it "private". Trying to access a double underscore attribute directly will throw an AttributeError.
>>> class Foo(object):
... def __init__(self):
... self.__a = 42
... def look_here(self):
... print self.__a
...
>>> f = Foo()
>>> f.__a
Traceback (most recent call last):
File "<stdin>", line 1, in ?
AttributeError: 'Foo' object has no attribute '__a'
>>> f.look_here()
42