查找所有双下划线变量的列表?

Posted

技术标签:

【中文标题】查找所有双下划线变量的列表?【英文标题】: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。

【问题讨论】:

这些都不是关键字 本身;他们只是“神奇”。 【参考方案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

【讨论】:

以上是关于查找所有双下划线变量的列表?的主要内容,如果未能解决你的问题,请参考以下文章

【变量】关于单下划线、双下划线开头变量的含义

什么双下划线的意思是在C语言中的变量名

Python(88)_双下划线方法

python 如何修改双下划线变量

如何给文章中所有相同的字添加下划线

带有变量和方法的下划线与双下划线[重复]