以下代码显示没有错误。
class Bar():
pass
class Foo():
def __init__(self):
self.__bar = Bar()
def get_bar(self):
return self.__bar
foo = Foo()
bar1 = foo.get_bar()
foo.__bar = Bar()
bar2 = foo.get_bar()
assert (bar1 is bar2)
为什么__bar表现得像单身?
答案 0 :(得分:4)
因为双下划线are magical:Python破坏了这些名称,因此无法从类外部访问它们。
如果您要将示例的最后三行替换为...
foo._Foo__bar = Bar()
bar2 = foo.get_bar()
assert (bar1 is bar2)
...你会看到你期望的行为。