使用下划线为私有类添加前缀是一种约定吗?

时间:2011-09-30 11:11:48

标签: python

我见过代码,其中函数/常量以下划线为前缀。 我的理解是,这表明它们不能直接使用。 我可以用课程吗?

class _Foo(object):
    pass

class __Bar(object):
    pass

4 个答案:

答案 0 :(得分:7)

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

它不会与全能from <module> import *一起导入,而且还有一些其他功能,例如“首选销毁”。

来自here

  

如果未定义__all__,则公共名称集包括所有名称   在模块的命名空间中找到的不以下划线开头   字符('_')。

来自here

  

从1.5版开始,Python保证名称以a开头的全局变量   在删除其他全局变量之前,将从其模块中删除单个下划线。

双下划线的起始成员是name-mangled

答案 1 :(得分:5)

是;单个下划线用法由PEP8认可用于内部使用类。

我不相信双下划线的用法在大多数情况下都会产生任何实际效果,因为它用于激活类属性的名称修改,并且通常一个类不是另一个类的属性(被授予,它< em> can ,在这种情况下,Python会很乐意为你命名。)

答案 2 :(得分:2)

你可以使用单个下划线作为任何变量中的第一个字符,但它带有隐含的含义,“不要在类/模块之外使用,除非你真的知道你在做什么”(例如,意图保护) / internal)如果您使用from <module> import *,则不会导入。

使用双下划线是你不应该在课外进行的事情,因为它可能会混淆名称错误(而且“可能”,我的意思是,“过去一周让我头疼,因为我没有意识到它确实“)。

答案 3 :(得分:2)

是的,这不仅仅是一个惯例。当您从此模块import *时,将不会导入以下划线开头的名称。