为什么python没有像c#,java,public,private等那样的Access修饰符。在python中封装和信息隐藏的替代方法是什么。
答案 0 :(得分:10)
来自Wikipedia:
的The Hitchhiker’s Guide to Python!段中描述了同样的情绪[Python]使用name mangling对私有变量的支持有限。请参阅"Classes" section of the tutorial for details。许多 但是,Python用户并不觉得需要私有变量。该 标语"We're all consenting adults here"用于描述这一点 态度。有些人认为信息隐藏是unpythonic,in 它表明该课程包含不美观或 计划不周的内部人员。但是,名称最强的论据 破坏是防止程序不可预测的破坏: 在超类中引入新的公共变量可能会破坏子类 如果他们不使用“私人”变量。
从教程中: 同样如此 对于模块,Python中的类之间没有绝对的障碍 定义和用户,而不是依赖用户的礼貌 “打破定义。”
答案 1 :(得分:4)
另一种方法是命名你的私人" (它们在python中并不是私有的)带有标识符,可以很容易地识别出不应该从外部使用这些成员。
例如:
class RedmineWriter:
__server = None
__connected = False
...
...
...
但是,如果类用户真的想要更改这些属性,他就没有问题。他不负责任。
请注意:http://docs.python.org/2/tutorial/classes.html#tut-private
答案 2 :(得分:0)
C#和Java中的访问修饰符有什么区别?如果我有源代码,如果我想访问成员变量,可以简单地将访问权限从私有更改为公共。只有当我有一个已编译的库时,访问修饰符才能被更改,也许它们在限制API时提供了一些有用的功能。但是,python无法编译,因此共享库必须共享源代码。因此,除非有人创建python编译器,否则访问修饰符将无法真正实现任何目的。