Ich bin ein bisschen von diesem Verhalten verwechselt (Python 3.2):Python Doppelstrich Mangeln
class Bar:
pass
bar = Bar()
bar.__cache = None
print(vars(bar)) # {'__cache': None}
class Foo:
def __init__(self):
self.__cache = None
foo = Foo()
print(vars(foo)) # {'_Foo__cache': None}
Ich habe ein bisschen auf nachlesen, wie doppelt Unterstreichen Attributnamen verursachen „verstümmelten“ zu sein, aber Ich hätte in beiden Fällen denselben Namen-Mangling erwartet.
What is the meaning of a single- and a double-underscore before an object name?
Irgendwelche Ideen, was hier vor sich geht?
Der Punkt des Mangelns ist genau, um zu verhindern **, dass Ihr zweiter Fall richtig funktioniert. Die Absicht ist, das Attribut vor externem Code zu verbergen. – millimoose