私はこの振る舞い(Python 3.2を使用)に少し混乱しています:
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}
二重アンダースコアによって属性名が「マングル」される方法について少し読んだことがありますが、上記の両方の場合で同じ名前マングリングを期待していました。
オブジェクト名の前のシングルアンダースコアとダブルアンダースコアの意味は何ですか?
ここで何が起こっているのかアイデアはありますか?