查找所有双下划线变量的列表?
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 名称不在此列表中:add、iadd、radd等 @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
【讨论】:
以上是关于查找所有双下划线变量的列表?的主要内容,如果未能解决你的问题,请参考以下文章