为什么Python没有访问修饰符?Python有哪些替代方案?
为什么Python没有像C#、Java那样的访问修饰符,比如public(公共)、private(私有)等呢?在Python中,有什么其他方法可以实现封装和信息隐藏呢?
3 个回答
在C#和Java中,访问修饰符有什么不同呢?如果我有源代码,我可以简单地把一个成员变量的访问权限从私有改成公共,这样就能访问它了。只有在我有一个编译好的库的时候,访问修饰符才不能被更改,可能在那种情况下,它们能提供一些有用的功能,比如限制API的使用。不过,Python是不能被编译的,所以分享库的时候就必须分享源代码。因此,直到有人开发出Python编译器,访问修饰符其实并没有什么实际的作用。
另一种方法是给你的“私有”成员起个名字,这样外面的人一看就知道这些东西不应该被随便使用。
比如:
class RedmineWriter:
__server = None
__connected = False
...
...
...
不过,如果使用这个类的人真的想要修改这些属性,那他是完全可以做到的。这是他自己的责任,不要去改。
可以参考:http://docs.python.org/2/tutorial/classes.html#tut-private
来自维基百科的内容:
[Python] 对私有变量的支持有限,主要是通过名称改编来实现。想了解更多细节,可以查看教程中的“类”部分。不过,很多Python用户并不觉得需要私有变量。人们常用一句话“我们都是成年人”来形容这种态度。有些人认为信息隐藏不符合Python的风格,因为这暗示着相关的类内部结构不够美观或设计不合理。然而,支持名称改编的一个重要理由是为了防止程序出现不可预测的故障:如果在父类中引入了一个新的公共变量,而子类没有使用“私有”变量,这可能会导致子类出错。
来自教程的内容: 就像模块一样,Python中的类并没有在定义和用户之间设置绝对的障碍,而是依赖于用户的礼貌,不去“闯入定义”。
这种观点在“我们都是成年人”的段落中也有提到,出现在《Python编程指南》中。