我见过代码,其中函数/常量以下划线为前缀。 我的理解是,这表明它们不能直接使用。 我可以用课程吗?
class _Foo(object):
pass
class __Bar(object):
pass
答案 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 *
时,将不会导入以下划线开头的名称。