参考Python PEP8:
__double_leading_and_trailing_underscore__
:"魔法"生活在用户控制的命名空间中的对象或属性。例如。__init__
,__import__
或__file__
。不要发明这样的名字;只能按照文件记录使用它们。
我浏览了许多与Python中使用下划线有关的问题,我认为我已经理解了大多数问题的答案(例如private
属性,name mangling
等)。我想我也理解了前面提到的双前导和尾随下划线的使用。我想它是为了保护像__init__
这样的函数,它们类似于C ++和Java等语言中的构造函数。
但是它不应该被称为community-controlled namespaces
(社区我的意思是Python社区)?作者在说user-controlled namespaces
时的意思是什么?事实上,似乎意图恰恰相反:用户不应该(通常)对这些命名空间琐碎。
答案 0 :(得分:2)
用户控制的命名空间意味着命名空间,其中用户使用Python编程控制存在的名称以及它们具有的值。换句话说,基本上是用户创建的API。这意味着您不应该设计依赖于您组成的新__doubleunderscore_names__
的API。
“命名空间”这里没有引用命名约定,而是指实际的编程范围。例如,每个函数的局部变量都有一个本地名称空间;模块的全局变量具有全局命名空间;用户绝对会使用这些名称空间 - 你将创建自己的变量,类,函数等。它所说的是你不应该制作新的神奇的名字并将它们放在你的名字空间中。
答案 1 :(得分:2)
用户控制的命名空间是全局变量或对象属性等命名空间。 Python程序员可以将他或她选择的任何名称放入这些名称空间中;社区不赞成无法阻止它。像__init__
和__file__
这样的双重名称以及程序员定义的普通名称都存在于这些名称空间中。 PEP 8建议用户不要创建看起来像标准魔术名称的非标准名称。