【发布时间】:2011-06-21 12:49:34
【问题描述】:
我有以下代码:
class MyClass:
def __private(self):
print "Hey man! This is private!"
def public(self):
__private()
print "I don't care if you see this!"
if __name__ == '__main__':
x = MyClass()
x.public()
但是它给了我以下错误:
NameError: global name '_MyClass__private' is not defined
我做错了什么?
【问题讨论】:
-
另外,如果您还没有,请阅读文档的这一部分:docs.python.org/tutorial/classes.html#private-variables 单下划线是“私有”变量的典型约定。当你想避免继承自
MyClass的类中的名称冲突时,通常只使用双下划线。双下划线将调用名称修饰,这可能是您想要的,但我想确保您知道它... -
请不要使用
__。它保留用于“名称修饰”,这是 Python 在内部执行的一项操作,以确保内部名称永远不会发生冲突。