【发布时间】:2015-04-19 01:13:06
【问题描述】:
我在使用 python 时遇到了一个奇怪的问题。考虑下面的代码:
class Foo:
__bar=None
foo=Foo()
foo.bar=10
print(foo.bar)
我相信我应该在这里得到一个错误。但我得到的输出为 10。即使我将代码更改为:
foo=Foo()
foo.__bar=10
print(foo.__bar)
有人可以解释为什么我在这里没有收到错误吗?另外我应该怎么做才能得到错误? 为进一步澄清而编辑:
class Foo:
def __init__(self):
self.__bar=10
def get_bar(self):
return self.__bar
foo=Foo()
foo.__bar=20
print(foo.__bar)
print(foo.get_bar())
谁能解释为什么我得到的答案是 20 和 10?我以为尝试访问类外的私有实例变量会出错。感谢您的帮助。
【问题讨论】:
-
为什么你认为你应该得到一个错误?在你看来,你做错了什么?
-
“私有”变量的下划线只是一个约定。而已。此外,
bar和__bar不是同一个属性。 Python 中没有任何内容表明这应该触发任何事情。 -
哇,这是一个重复。有人解开它吗?
-
这个问题不是重复的,因为它一般不是询问前导双下划线,而是询问具体用法,并且其他问题中的答案均未涵盖此问题的答案。