Python的“魔法常量”有一个完整的表吗?

tmb3ates  于 2023-01-27  发布在  Python
关注(0)|答案(1)|浏览(110)

有人知道__file____main__,等等是在哪里定义的吗?它们的正式名称是什么?__eq____ge__是“魔术方法”,所以现在我只是把它们统称为“魔术常数”,但我甚至不知道这是否正确。
Google搜索真的没有找到任何东西,甚至Python自己的文档在浏览了各个页面后似乎也没有一个完整的列表,任何关于这个主题的指导都是非常感谢的。

tkclm6bt

tkclm6bt1#

简短回答:* * 不**。对于更长的答案,这已经严重失控了,请继续阅读...
据我所知,没有关于这些__dunder_names__的完整表格(也不是它们的官方名称!)。

  • 唯一真正的"魔术常数"是__debug__:它是一个SyntaxError,它包含在常量列表中,并且在assert语句的上下文中提到。
  • 另一个由语句专门使用的模块级名称是__all__,它与import语句一起记录。
  • library reference中记录了两个特殊模块,它们有自己的页面:
  • __main__是执行脚本的顶级环境。
  • __future__用于访问尚未强制的语言特性(例如,print_function用于替换Python 2中的print语句)。
  • 其余大部分(__name____file__等)由导入系统添加到模块中,因此在导入文档中列出。

还有很多与对象相关的,实现内置行为的基本方法(如__eq____ge__,正如你提到的)在the data model documentation中列出,但是还有很多其他的,更具体的名称存在;例如,在the exceptions documentation中,有几个与异常具体相关,如__cause____traceback__
请注意,这些属性中的大多数都没有什么特别"神奇"的地方,它们只是常规属性,可以根据需要进行赋值,但是,它们被认为是为Python内部机制保留的,所以不应该添加自己的属性;根据"保留标识符类别"的语言参考:

  • 任何 * 在任何上下文中使用的__*__名称,如果没有遵循明确记录的使用,都可能在没有警告的情况下被破坏。

也就是说,有几个常用的,我不认为实际上是指定 * 任何地方 * 在官方文档,如__author____version__;参见例如What is the common header format of Python files?What is the origin of author?少数通过PEP-8具有半官方状态,但仅此而已。
从表面上看,还有几个人走过这条路:

相关问题