- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
背景:对于那些不熟悉它的人,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/
有没有办法在 Java 中找到所有硬编码的数字和字符串?我的意思是尚未放入专用变量的值。 例如: while (i < 6) { System.out.println("6 is a numb
在Scala _ [underscore] magic中,Anantha Kumaran使用_+_作为(a,b)=>a+b的缩写。 在Kotlin Koans -- SAM conversions中,
更新:字典解决方案很棒,除非要查找的事物的数量与列表中的事物数量相比显得苍白无力。我应该事先说明这一点。 假设你有数组: var arr = { Tuple.Create("1", "won"),
有没有一种魔术方法,当从一个对象调用某个方法时,首先调用一个魔术方法。有点像 __call 方法,但这只会在找不到该方法时触发。 所以就我而言,我想要这样的东西: class MyClass {
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我试图在 WPF 中制作一些动画,并在动画结束时运行一些其他操作。 另外,想避免动画完成回调机制,所以,我想出了一个解决方案,如下面的代码所示: // Start one second of anim
我正在测试用于 Web 窗体的新 ASP.NET 4.5 模型绑定(bind),使用一个简单的存储库公开 IQueryable。该存储库使用 EF 5,数据库优先方法。我正在投影 EF 自动生成的实体
我一直在阅读OpenGL ES 2.0,SpriteKit和GLKit,但是我仍然不知道如何解决以下问题。 问题: 1)创建一个圆柱形的360度空间,该空间容纳一个AVCaptureVideoPrev
我将 iPython 更新为: Python 3.6.7 (default, Mar 29 2019, 10:38:28) Type 'copyright', 'credits' or 'licens
我正在为C#项目构建一个日志记录控件,并希望能够使用当前源代码文件,行,类,函数等的名称来调用它。PHP使用具有所有此信息的“魔术常数”: http://php.net/manual/en/langu
我想为我拥有的MTG卡创建一个数据库。设计将是什么? 我想存储有关每张卡的以下信息: 1. Name of card. 2. Set the card belongs to. 3. Condition
我正在使用 __get()使我的一些属性“动态”(仅在请求时初始化它们)。这些“假”属性存储在私有(private)数组属性中,我正在 __get 中检查它。 无论如何,您认为为每个属性创建方法比在
我已经使用 magento 有一段时间了,总是无法在使用魔法 getter 和 getData() 之间做出决定 除了轻微的性能开销(而且必须非常轻微)之外,有人可以解释主要区别吗? 我在思考: fu
多年前,在我失传已久的 Charles Petzold 的 Windows 3.0 编程书籍中,记录了一个神奇的 COLORREF 或 RGB 值,您可以使用它来检查应该用浅色还是深色绘制文本。例如。
我想编写一个包装类,它接受一个值并且除了添加一个“原因”属性外,其行为与它一样。我有这样的想法: class ExplainedValue(object): def __init__(self
IPython %timeit 魔术命令在测量运行某些 Python 代码所需的时间方面做得很好。现在,我想在 Python 脚本中使用类似的东西。我知道 timeit 模块,但是它有几个缺点,例如,
以下是 python 2.7 和 MySQLdb 1.2.3。 我需要一个类包装器来为不支持它的对象添加一些属性(带有 __slots__ 的类和/或一些用 C 编写的类)所以我想出了这样的东西: c
我是 Ruby 的新手,正在学习一些教程/截屏视频。我已经到达他们讨论 before_filter 回调的部分,它使用了一些对我来说有点奇怪的语法。我不知道它是否是 ruby 的一个特性,或者它是
新年快乐! 我是 Python 新手 multiprocessing模块。为了更好地理解 apply_async有效,我在下面写下了简短的脚本。除非我将第二行注释掉( get_ipython().ma
我正在尝试遵循以下示例:http://bl.ocks.org/3887051 但是,我有一个 JSON 对象,而不是 CSV。 现在,我看到我可以按照以下说明将 JSON 转换为 CSV:How to
我是一名优秀的程序员,十分优秀!