python - 内置魔术变量名称/属性

标签 python syntax sublimetext built-in magic-methods

背景:对于那些不熟悉它的人,Sublime Text (和 TextMate)通过 .tmLanguage 语言定义文件定义的范围提供语法高亮和其他功能,基本上是一堆正则表达式来识别给定语言中的各种结构,例如函数定义,各种类型字符串、保留字等。

我是 Python Improved 的维护者包(如果您有兴趣,可以通过 Package Control 获得)旨在成为 Python 的更好的语言定义。如果需要,您可以在 GitHub 上阅读它,但其中一个关键特性是它实际上得到了维护,这与许多多年未更改或更新的 Sublime 语言不同。

问题:我最近一直在关注双下划线的 __magic__ 内容,并且在找到 this excellent treatise 之后由 Rafe Kettler 撰写的关于魔术功能的文章 我能够相当多地扩展语言定义的那一部分。但是,我不太幸运地找到了一个很好的内置魔法变量名列表或魔法属性,例如 __class____doc__。我已经完成了 Data Model文档的一部分,但它为我的目的留下了一些不足之处,并且似乎主要集中在魔术方法名称上。

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

\b__(all|bases|class|debug|dict|doc|file|members|metaclass|methods|module|name|slots|weakref)__\b

我开始这个项目的原因之一是要自学更多关于 Python 的知识,到目前为止我确实取得了成功,但我有点卡在了这一点上。

需要说明的是,我不是在寻找最喜欢的场外资源(尽管如果您有一个方便的链接,我将不胜感激),我也不是要开始一场固执己见的讨论。我想弄清楚的是这个列表是否按原样看起来合理,或者是否有任何明显的错误。如果你确实想要固执己见,open an issue我非常乐意讨论。

谢谢!

最佳答案

唉,数据模型文档是我能想到的最完整的东西了,它甚至还没有真正设计成索引。不过,我并不完全清楚你在寻找什么; __all__是一个全局模块,__slots__是一个类属性,__weakref__仅在插槽列表中显示为字符串,并且 __module__是一个函数属性等。我想是不是通常不能调用的任何特殊属性?

当然,你随时可以问 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__']

一看就肯定缺__mro____subclasses__ .有点复杂的是,有一些特殊的方法只被恰好内置到 Python 中的代码使用,而不是被核心语言使用:示例包括 __format__ (由 str.format 使用)和各种 ABC 方法。

我什至不知道什么__weakrefoffset__

注意 Python 3 有一些新东西:有一个 __prepare__元类恶作剧、函数和方法使用的方法现在为其属性使用魔术名称,而不是像 im_self 这样的噪音(请参阅数据模型的“用户定义函数”部分),并且有一个 __qualname__在模块和类上。

另外,importing PEP确切地提到了模块加载器应该做什么,包括设置一些神奇的属性:__name__ , __file__ , __path__ , __loader__ , 和 __package__ .

关于python - 内置魔术变量名称/属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20340815/

相关文章:

python - Tweepy Hipchat API - 除了速率限制?

php - MYSQL连接查询语法

c - 为什么在这个例子中 (int) 周围有括号?

c++ - 如何在 Sublime Text 上的 Windows/Cygwin 上构建 yaml-cpp?

python - 在任何文本编辑器中使用 Python Shell

python - 使用Python创建SPSS自定义对话框

python - 优化(python)算法的最佳方法?

python - 创建滚动总和列,一旦达到阈值就会重置

bash - 在 bash 中将条件参数传递给curl

ubuntu - 安装时 sublime text 3 包控制卡住