为什么python没有访问修饰符?python中有什么替代品?

时间:2014-03-26 09:07:12

标签: python access-modifiers

为什么python没有像c#,java,public,private等那样的Access修饰符。在python中封装和信息隐藏的替代方法是什么。

3 个答案:

答案 0 :(得分:10)

来自Wikipedia

  

[Python]使用name mangling对私有变量的支持有限。请参阅"Classes" section of the tutorial for details。许多   但是,Python用户并不觉得需要私有变量。该   标语"We're all consenting adults here"用于描述这一点   态度。有些人认为信息隐藏是unpythonic,in   它表明该课程包含不美观或   计划不周的内部人员。但是,名称最强的论据   破坏是防止程序不可预测的破坏:   在超类中引入新的公共变量可能会破坏子类   如果他们不使用“私人”变量。

     

从教程中:   同样如此   对于模块,Python中的类之间没有绝对的障碍   定义和用户,而不是依赖用户的礼貌   “打破定义。”

We are all consenting adults

The Hitchhiker’s Guide to 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编译器,否则访问修饰符将无法真正实现任何目的。