这种“下划线”似乎经常出现,我想知道这是否是 Python 语言的要求,或者仅仅是约定的问题?
另外,有人可以命名并解释哪些函数倾向于带有下划线,以及为什么(__init__例如)?
__init__
来自Python PEP 8——Python 代码样式指南:
[描述性:命名样式](https://www.python.org/dev/peps/pep-0008/#descriptive-naming- styles) 识别以下使用前导或尾随下划线的特殊形式(这些通常可以与任何大小写约定结合使用): _single_leading_underscore:弱“内部使用”指标。例如from M import *,不导入名称以下划线开头的对象。 single_trailing_underscore_: 按照惯例使用以避免与 Python 关键字冲突,例如 Tkinter.Toplevel(master, class_='ClassName') __double_leading_underscore: 当命名一个类属性时,调用名称修饰(在类 FooBar 中,__boo变为_FooBar__boo; 见下文)。 __double_leading_and_trailing_underscore__: 存在于用户控制的命名空间中的“神奇”对象或属性。例如__init__, __import__或__file__。永远不要发明这样的名字;仅按记录使用它们。
styles)
识别以下使用前导或尾随下划线的特殊形式(这些通常可以与任何大小写约定结合使用):
_single_leading_underscore:弱“内部使用”指标。例如from M import *,不导入名称以下划线开头的对象。
_single_leading_underscore
from M import *
single_trailing_underscore_: 按照惯例使用以避免与 Python 关键字冲突,例如
single_trailing_underscore_
Tkinter.Toplevel(master, class_='ClassName')
__double_leading_underscore: 当命名一个类属性时,调用名称修饰(在类 FooBar 中,__boo变为_FooBar__boo; 见下文)。
__double_leading_underscore
__boo
_FooBar__boo
__double_leading_and_trailing_underscore__: 存在于用户控制的命名空间中的“神奇”对象或属性。例如__init__, __import__或__file__。永远不要发明这样的名字;仅按记录使用它们。
__double_leading_and_trailing_underscore__
__import__
__file__
请注意,带有双前导和尾随下划线的名称本质上是为 Python 本身保留的:“永远不要发明这样的名称;仅按照文档说明使用它们”。