为什么Python没有访问修饰符?Python有哪些替代方案?

17 投票
3 回答
8427 浏览
提问于 2025-04-17 23:57

为什么Python没有像C#、Java那样的访问修饰符,比如public(公共)、private(私有)等呢?在Python中,有什么其他方法可以实现封装和信息隐藏呢?

3 个回答

3

在C#和Java中,访问修饰符有什么不同呢?如果我有源代码,我可以简单地把一个成员变量的访问权限从私有改成公共,这样就能访问它了。只有在我有一个编译好的库的时候,访问修饰符才不能被更改,可能在那种情况下,它们能提供一些有用的功能,比如限制API的使用。不过,Python是不能被编译的,所以分享库的时候就必须分享源代码。因此,直到有人开发出Python编译器,访问修饰符其实并没有什么实际的作用。

4

另一种方法是给你的“私有”成员起个名字,这样外面的人一看就知道这些东西不应该被随便使用。

比如:

class RedmineWriter:

    __server = None
    __connected = False
...
...
...

不过,如果使用这个类的人真的想要修改这些属性,那他是完全可以做到的。这是他自己的责任,不要去改。

可以参考:http://docs.python.org/2/tutorial/classes.html#tut-private

12

来自维基百科的内容:

[Python] 对私有变量的支持有限,主要是通过名称改编来实现。想了解更多细节,可以查看教程中的“类”部分。不过,很多Python用户并不觉得需要私有变量。人们常用一句话“我们都是成年人”来形容这种态度。有些人认为信息隐藏不符合Python的风格,因为这暗示着相关的类内部结构不够美观或设计不合理。然而,支持名称改编的一个重要理由是为了防止程序出现不可预测的故障:如果在父类中引入了一个新的公共变量,而子类没有使用“私有”变量,这可能会导致子类出错。

来自教程的内容: 就像模块一样,Python中的类并没有在定义和用户之间设置绝对的障碍,而是依赖于用户的礼貌,不去“闯入定义”。

这种观点在“我们都是成年人”的段落中也有提到,出现在《Python编程指南》中。

撰写回答