我有以下代码:
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
我做错什么了?在
您需要
self
:Python中的类如果你来自C/C++/java,就习惯了。这可能是在屠杀“Python式”的措辞方式,但你可以这样想(它帮了我):
每个类都定义了一个命名空间,从它自己内部定义为
self
,从外部定义为该类的一个实例的名称。”Private”带有两个下划线的东西会被弄乱,因此从没有下划线的地方你必须用一个特殊的名称来调用它,但是从内部你可以简单地使用self.__private()
。在正如Joe在他的评论中提到的,普通的私有变量通常只是用一个下划线命名,而双下划线会破坏它,这样继承就可以在子类中不发生名称冲突的情况下工作。python中没有对隐私权的强制,它纯粹是约定不能在类之外使用私有变量。在
正如托马斯所说,
^{pr2}$self
也是一种惯例。对于任何方法(声明为类的一部分的函数),调用该方法的实例是传入的第一个参数。你可以很容易地做到:然而,如果你这样做,逻辑精神和良好的编程风格将永远困扰你和你的后代。(
self
更可取)。在有没有Python爱好者想纠正/进一步解释?在
您的代码正在尝试调用静态函数MyCalls。\uu private,您要执行以下操作:
相关问题 更多 >
编程相关推荐