jestem nieco zdezorientowany tego zachowania (przy użyciu Pythona 3.2):Python podwójne podkreślenia maglowania
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}
Czytałem się trochę o tym, jak podwójne podkreślenia powodować nazw atrybutów być „zniekształcone”, ale Spodziewałbym się tego samego wymieszania nazw w obu przypadkach powyżej.
What is the meaning of a single- and a double-underscore before an object name?
jakieś pomysły, co tu się dzieje?
Celem łamania jest właśnie ** zapobieganie ** twojemu drugiemu przypadkowi nie działa poprawnie. Zamiarem jest ukrycie atrybutu z kodu zewnętrznego. – millimoose