>有谁知道__file__
、__main__
等在哪里定义?他们的正式名称是什么? __eq__
和__ge__
是"魔术方法",所以现在我只是将它们完全称为"魔术常数",但我什至不知道这是否正确。
谷歌搜索真的没有找到任何东西,甚至Python自己的文档在浏览各个页面后似乎也没有一个完整的列表。关于这一主题的任何指导将不胜感激。
简短回答:不。对于更长的答案,它严重失控,继续阅读......
据
我所知,没有这些__dunder_names__
的综合表格(也不是他们的官方头衔!)。有几个来源:
唯一真正的"魔术常数"是
__debug__
:这是一个尝试分配给这个名称SyntaxError
。它包含在常量列表中,并在assert
语句的上下文中提及。语句特定使用的另一个模块级名称是
__all__
,它与import
语句一起记录。库参考中记录了两个特殊模块,它们有自己的页面:
__main__
是执行脚本的顶级环境。__future__
用于访问尚未强制使用的语言功能(例如print_function
替换 Python 2 中的print
语句)。
其余的大部分(
__name__
、__file__
等)都是由导入系统添加到模块中的,因此列在导入文档中。
也有许多与对象相关的。实现内置行为的基本方法(如您提到的__eq__
和__ge__
)在数据模型文档中列出。但是还有许多其他更具体的名称存在;例如,在异常文档中有几个专门与异常相关的异常,如 __cause__
和 __traceback__
。
请注意,其中大多数都没有什么特别"神奇"的,它们只是常规属性,可以根据需要分配。但是,它们被认为是为内部 Python 机器保留的,因此您不应该添加自己的机器;根据"标识符的保留类"的语言参考:
在任何情况下,任何未明确记录使用
__*__
名称的行为,都会在没有警告的情况下被破坏。
也就是说,有几个常用的,我认为实际上没有在官方文档中的任何地方指定,例如__author__
和__version__
;例如,请参阅Python文件的常见标头格式是什么?以及__author__的起源是什么?少数通过PEP-8获得半官方地位,但仅此而已。
其他一些人走过这条路,从外观上看:
- 查找所有双下划线变量的列表?
- 我需要__closure__
- 内置魔术变量名称/属性