Bob*_*lan 6 python private public
我有以下代码:
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()
Run Code Online (Sandbox Code Playgroud)
但是它给了我以下错误:
NameError: global name '_MyClass__private' is not defined
我究竟做错了什么?
Cri*_*ole 22
你需要self:
self.__private()
Run Code Online (Sandbox Code Playgroud)
如果你来自C#/ C++/Java,python中的类习惯了,就像你看起来一样.这可能是屠杀"pythonic"方式的措辞,但你可以这样思考它(它帮助了我):
每个类定义一个从其自身内部定义的名称空间self,而不是该类的实例名称.带有两个下划线的"私有"东西会被破坏,所以从没有你必须通过一个特殊的名称来调用它,但是从你内部可以简单地使用它self.__private().
正如Joe在他的评论中提到的,正常的私有变量通常只用一个下划线命名,双下划线会破坏它,因此继承可以在子类中没有名称冲突的情况下工作.python中没有隐私强制执行,纯粹的惯例是说你不能在课堂外使用私有变量.
正如托马斯所说,self这也是一个惯例.对于任何方法(声明为类的一部分的函数),调用该方法的实例是传入的第一个参数.您可以轻松地执行此操作:
def __private(randomText):
print "Hey man! This is private!"
def public(otherRandomText):
otherRandomText.__private()
print "I don't care if you see this!"
Run Code Online (Sandbox Code Playgroud)
然而,如果你这样做,逻辑精神和良好的编程风格将永远困扰着你和你的后代.(self更可取的).
任何pythonistas希望纠正/进一步解释?
| 归档时间: |
|
| 查看次数: |
4192 次 |
| 最近记录: |