引用Python PEP8:
__double_leading_and_trailing_underscore__
: "magic" objects or attributes that live in user-controlled namespaces. E.g.__init__
,__import__
or__file__
. Never invent such names; only use them as documented.
我浏览了许多与Python中使用下划线相关的问题,我想我已经理解了大多数问题的答案(比如private
属性、name mangling
等)。我想我也理解了前面提到的双前导和尾随下划线的用法。我想它是为了保护函数,比如^ {CD3}},它与C++和java语言中的构造函数类似。在
但是,它不应该被称为community-controlled namespaces
(我指的是Python社区)?作者说user-controlled namespaces
是什么意思?事实上,其目的似乎恰恰相反:用户不应该(通常)玩弄这些名称空间。在
用户控制的名称空间是指用户在Python中编程时控制存在的名称和它们的值的名称空间。换句话说,基本上是用户创建的api。它的意思是,你不应该设计一个依赖于你编出来的新的
__doubleunderscore_names__
的API。在这里的“Namespace”不是指命名约定,而是指实际的编程范围。例如,每个函数的局部变量都有一个局部名称空间;一个模块的全局变量有一个全局名称空间;等等。用户绝对会使用这些名称空间—您将创建自己的变量、类、函数等。。它的意思是,你不应该编造新的看起来像魔术的名字,然后把它们放在你的名字空间里。在
用户控制的命名空间是与全局变量或对象属性类似的命名空间。Python程序员可以将他或她选择的任何名称放入这些名称空间中;社区的反对并不能阻止它。像}这样的双dunder名称与程序员定义的普通名称一起存在于这些名称空间中。pep8建议用户不要创建看起来像标准魔术名称的非标准名称。在
__init__
和{相关问题 更多 >
编程相关推荐