Python 内置魔术变量名/属性

Python 内置魔术变量名/属性,python,syntax,sublimetext,built-in,magic-methods,Python,Syntax,Sublimetext,Built In,Magic Methods,Background:对于不熟悉它的人,(和TextMate)通过.tmLanguage语言定义文件定义的作用域提供语法突出显示和其他功能,基本上是一组正则表达式,用于识别给定语言中的各种结构,例如函数定义,各种类型的字符串、保留字等 我是该软件包的维护者(如果您有兴趣,可以通过获取),该软件包旨在成为Python的更好的语言定义。如果你愿意,你可以在GitHub上读到它,但是它的一个关键特性是它实际上是被维护的,不像许多优秀的语言,这些语言多年来都没有被更改或更新过 问题:我最近一直在关注双下

Background:对于不熟悉它的人,(和TextMate)通过
.tmLanguage
语言定义文件定义的作用域提供语法突出显示和其他功能,基本上是一组正则表达式,用于识别给定语言中的各种结构,例如函数定义,各种类型的字符串、保留字等

我是该软件包的维护者(如果您有兴趣,可以通过获取),该软件包旨在成为Python的更好的语言定义。如果你愿意,你可以在GitHub上读到它,但是它的一个关键特性是它实际上是被维护的,不像许多优秀的语言,这些语言多年来都没有被更改或更新过

问题:我最近一直在关注双下划线的
\uuuuuu magic\uuuuuu
内容,在Rafe Ketterr找到了有关magic函数的内容后,我能够将语言定义的这一部分扩展了很多。然而,在找到一个很好的内置魔术变量名或魔术属性列表时,我的运气就差一点了,比如
\uuuuuuu class\uuuuuuuuuu
\uuuuuu doc\uuuuuu
。我已经阅读了文档的这一部分,但对于我的目的来说还有一点不尽如人意,似乎主要集中在神奇的方法名称上

所以我的问题是,
support.variable.magic.python
范围应该包括什么?到目前为止,这是它的定义:

\b|uuuuuuu(所有|基|类|调试| dict | doc |文件|成员|元类|方法|模块|名称|插槽| weakref)
我开始这个项目的原因之一是为了教自己更多关于Python的知识,到目前为止我确实取得了成功,但我有点被困在这一点上

我要说的是,我不是在寻找一个最喜欢的场外资源(尽管如果你有一个方便的链接,我会很感激),我也不是在试图开始一场固执己见的讨论。我只是想弄清楚这个列表看起来是否合理,或者是否有任何明显的错误。如果你真的想固执己见,我很乐意和你讨论


谢谢

唉,数据模型文档是我能想到的最完整的东西,它甚至没有真正设计成索引。不过,我并不完全清楚你在找什么
\uuuuuuuuuuuuuuuuuuuuuu
是一个模块全局属性,
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
是一个类属性,
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu>是一个类属性,
在插槽列表

当然,您可以随时询问Python

>>> dir(type)
['__abstractmethods__', '__base__', '__bases__', '__basicsize__', '__call__', '__class__', '__delattr__', '__dict__', '__dictoffset__', '__dir__', '__doc__', '__eq__', '__flags__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__instancecheck__', '__itemsize__', '__le__', '__lt__', '__module__', '__mro__', '__name__', '__ne__', '__new__', '__prepare__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasscheck__', '__subclasses__', '__subclasshook__', '__weakrefoffset__', 'mro']
>>> import sys
>>> dir(type(sys))
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
乍一看,您肯定缺少了
\uuuumro\uuuuu
\uuuu子类。使这有点复杂的是,有些特殊方法仅由恰好内置到Python中的代码使用,而不是由核心语言使用:示例包括
\uuuuuuu format\uuuuuu
(由
str.format
使用)和各种ABC方法

我甚至不知道
\uuu weakrefoffset\uuu
是什么

注意Python3有一些新东西:元类Shenangans使用了一个
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
方法,函数和方法现在对它们的属性使用神奇的名称,而不是像
im\uself
那样的噪音(请参阅数据模型的“用户定义函数”部分),在模块和类上都有一个
\uuuuu qualname\uuuu


此外,还提到了模块加载器应该做什么,包括设置一些神奇的属性:
\uuuuu name\uuuuuu
\uuuuu file\uuuuuuuu
\uuuuu路径\uuuuu
\uuuuuuuu加载器\uuuuuuuu
,以及
\uuuuuuuuuuuuu包
,那么操作符呢<代码>\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu,
\uuuu str\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu这这些项目中的许多已经在“魔法功能”类别中,但不是全部,更多的在我在问题中发布的列表中,但不是全部。其他的,比如
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。别误会,我非常感激:)我只是想知道是否有办法对它们进行分类或排序。我会用我的google fu来看看它们各自的意思,然后把它们放在适当的类别中。问题是,我也不完全清楚其中应该包含什么-列表最初是由TextMate以升华文本的方式提供的,唯一的注释是“类/模块可能具有的神奇变量”。我想当我开始的时候,我在想应该有一个清晰的魔法函数列表,和另一个清晰的魔法属性列表,但看起来并没有那么清晰。
import gc

print("\n".join(sorted({attrname for item in gc.get_objects() for attrname in dir(item) if attrname.startswith("__")})))
#>>> __about__
#>>> __abs__
#>>> __abstractmethods__
#>>> __add__
#>>> __all__
#>>> __and__
#>>> __annotations__
#>>> __author__
#>>> __base__
#>>> __bases__
#>>> __basicsize__
#>>> __bool__
#>>> __build_class__
#>>> __builtins__
#>>> __cached__
#>>> __call__
#>>> __cause__
#>>> __ceil__
#>>> __class__
#>>> __closure__
#>>> __code__
#>>> __complex__
#>>> __concat__
#>>> __contains__
#>>> __context__
#>>> __copy__
#>>> __copyright__
#>>> __credits__
#>>> __date__
#>>> __debug__
#>>> __deepcopy__
#>>> __defaults__
#>>> __del__
#>>> __delattr__
#>>> __delete__
#>>> __delitem__
#>>> __dict__
#>>> __dictoffset__
#>>> __dir__
#>>> __displayhook__
#>>> __divmod__
#>>> __doc__
#>>> __enter__
#>>> __eq__
#>>> __excepthook__
#>>> __exit__
#>>> __file__
#>>> __flags__
#>>> __float__
#>>> __floor__
#>>> __floordiv__
#>>> __format__
#>>> __func__
#>>> __ge__
#>>> __get__
#>>> __getattr__
#>>> __getattribute__
#>>> __getitem__
#>>> __getnewargs__
#>>> __getstate__
#>>> __globals__
#>>> __gt__
#>>> __hash__
#>>> __iadd__
#>>> __iand__
#>>> __iconcat__
#>>> __ifloordiv__
#>>> __ilshift__
#>>> __imod__
#>>> __import__
#>>> __imul__
#>>> __index__
#>>> __init__
#>>> __initializing__
#>>> __instancecheck__
#>>> __int__
#>>> __inv__
#>>> __invert__
#>>> __ior__
#>>> __ipow__
#>>> __irshift__
#>>> __isabstractmethod__
#>>> __isub__
#>>> __itemsize__
#>>> __iter__
#>>> __itruediv__
#>>> __ixor__
#>>> __kwdefaults__
#>>> __le__
#>>> __len__
#>>> __loader__
#>>> __lshift__
#>>> __lt__
#>>> __missing__
#>>> __mod__
#>>> __module__
#>>> __mro__
#>>> __mul__
#>>> __name__
#>>> __ne__
#>>> __neg__
#>>> __new__
#>>> __newobj__
#>>> __next__
#>>> __not__
#>>> __objclass__
#>>> __or__
#>>> __package__
#>>> __path__
#>>> __pos__
#>>> __pow__
#>>> __prepare__
#>>> __qualname__
#>>> __radd__
#>>> __rand__
#>>> __rdivmod__
#>>> __reduce__
#>>> __reduce_ex__
#>>> __repr__
#>>> __reversed__
#>>> __rfloordiv__
#>>> __rlshift__
#>>> __rmod__
#>>> __rmul__
#>>> __ror__
#>>> __round__
#>>> __rpow__
#>>> __rrshift__
#>>> __rshift__
#>>> __rsub__
#>>> __rtruediv__
#>>> __rxor__
#>>> __self__
#>>> __set__
#>>> __setattr__
#>>> __setitem__
#>>> __setstate__
#>>> __sizeof__
#>>> __slots__
#>>> __stderr__
#>>> __stdin__
#>>> __stdout__
#>>> __str__
#>>> __sub__
#>>> __subclasscheck__
#>>> __subclasses__
#>>> __subclasshook__
#>>> __suppress_context__
#>>> __traceback__
#>>> __truediv__
#>>> __trunc__
#>>> __version__
#>>> __weakref__
#>>> __weakrefoffset__
#>>> __wrapped__
#>>> __xor__