【问题标题】:Finding a list of all double-underscore variables?查找所有双下划线变量的列表?
【发布时间】:2012-02-13 18:35:47
【问题描述】:

相关:What is the common header format of Python files?

在哪里可以找到 Python 中常用的所有双下划线变量/关键字的列表?

在 Python 中,以双下划线开头和结尾的变量通常用于存储元数据或内置于系统中。例如,

#!/usr/bin/env python

__author__ = 'Michael0x2a'
__license__ = 'GPL'

class Test(object):
    def __init__(self):
        print 'Hello World!'

if __name__ == '__main__':
    t = Test()

我很确定 __author____license__ 是众所周知的。还有哪些其他双下划线元数据变量?有没有我可以在某处查看的完整列表?我可以自己制定,还是有一堆已经成为我应该使用的事实上的标准?

__init____name____doc__ 之类的东西几乎都内置在 Python 中。这些是仅有的两个保留的双下划线关键字吗?还有吗?有什么地方可以得到一份清单吗?

[编辑]
我正在浏览并遇到另一个question,它链接到一堆双下划线变量的mindmap

【问题讨论】:

  • 这些都不是关键字 本身;他们只是“神奇”。

标签: python metadata convention


【解决方案1】:

如果您想查看是否记录了魔术名称,请转到 Lib 目录并运行:

egrep -oh '__[A-Za-z_][A-Za-z_0-9]*__' *.py | sort | uniq

产生:

'__all__'
'__args__'
'__author__'
'__bases__'
'__builtin__'
'__builtins__'
'__cached__'
'__call__'
'__class__'
'__copy__'
'__credits__'
'__date__'
'__decimal_context__'
'__deepcopy__'
'__dict__'
'__doc__'
'__exception__'
'__file__'
'__flags__'
'__ge__'
'__getinitargs__'
'__getstate__'
'__gt__'
'__import__'
'__importer__'
'__init__'
'__ispkg__'
'__iter__'
'__le__'
'__len__'
'__loader__'
'__lt__'
'__main__'
'__module__'
'__mro__'
'__name__'
'__package__'
'__path__'
'__pkgdir__'
'__return__'
'__safe_for_unpickling__'
'__setstate__'
'__slots__'
'__temp__'
'__test__'
'__version__'

【讨论】:

  • 有趣的是,有几十个知名的 dunder 名称不在此列表中:addiaddradd等
  • @NedBatchelder 要获得更完整的列表,您需要递归搜索 Lib 它下面的目录:find Lib -name '*.py' -exec egrep -oh '__[A-Za-z_][A-Za-z_0-9]*__' '{}' \; | sort | uniq。你会看到还有 很多 个名字——我的 Py27 结帐上有 256 个名字:)
【解决方案2】:

Python 使用的完整列表在Python Language Reference section 3, "Data model" 中给出。其他每个都是非标准的或由第三方模块使用,并单独记录。

【讨论】:

  • PEP 8 将 __version__ 列为唯一用于纯文档目的的全局变量。
  • 有趣的是,__version__ 没有出现在链接的语言参考中。
  • 那是因为它不是语言的一部分。
【解决方案3】:

当我使用时

dir(object)

我得到了这些:


'__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__has
h__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__'
, '__setattr__', '__sizeof__', '__str__', '__subclasshook__'

而且我认为它们是每个对象在 python 中的名称

【讨论】:

    【解决方案4】:

    这里有一个我喜欢的 dunder 及其用法的完整列表:magicmethods

    【讨论】:

      猜你喜欢
      • 2014-06-09
      • 2011-10-19
      • 2013-02-03
      • 1970-01-01
      • 2016-08-05
      • 2023-03-19
      • 2016-12-03
      • 2016-11-23
      • 2023-03-08
      相关资源
      最近更新 更多