私有类是否应该用下划线前缀?

10 投票
4 回答
3452 浏览
提问于 2025-04-17 03:25

我看到有些代码里的函数或常量前面加了下划线。我的理解是,这表示它们不应该被直接使用。我可以对类也这样做吗?

class _Foo(object):
    pass

class __Bar(object):
    pass

4 个回答

2

没错,这不仅仅是一种约定。当你用 import * 从这个模块导入内容时,以下划线开头的名字是不会被导入的。

6

是的,PEP8推荐在内部使用的类前加一个下划线。

我觉得加两个下划线大多数情况下不会有什么实际效果,因为它是用来让类属性的名字变得复杂的。一般来说,一个类并不是另一个类的属性(当然,它可以是,这种情况下Python会自动帮你处理名字的复杂化)。

10

最好只使用一个_。这表示这个名字在模块内部是私有的。

它不会通过那种一次性导入所有内容的方式from <module> import *被导入,还有一些其他特性,比如“优先销毁”。

这里可以看到:

如果没有定义__all__,那么公共名称的集合包括模块命名空间中所有不以下划线_开头的名字。

这里可以看到:

从1.5版本开始,Python保证那些名字以单个下划线开头的全局变量会在其他全局变量被删除之前,从它们的模块中删除。

以双下划线开头的类成员会被称为名称混淆

撰写回答