下面的代码没有显示错误。
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 表现得像单例?
最佳答案
因为双下划线are magical :Python 会修改这些名称,以便无法从类外部访问它们。
如果您要将示例的最后三行替换为...
foo._Foo__bar = Bar()
bar2 = foo.get_bar()
assert (bar1 is bar2)
...您会看到您期望的行为。
关于python - 带双下划线的变量名的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38895544/