mgi*_*son 12 python python-internals
我正在阅读一些基本上看起来像这样的代码:
class Foo(object):
class_name = __module__.replace('_', '-')
Run Code Online (Sandbox Code Playgroud)
对我来说,这看起来很奇怪(__module__那是什么?)所以我去了看python 数据模型.快速搜索显示这__module__是类对象和函数对象的属性.但是,__module__全局命名空间中没有可用的东西(只需要通过查看它并观察NameError结果就可以轻松验证...).
我决定将其用于实现特定的行为,但作为最后的检查,我决定使用其他实现进行测试.事实证明,此代码以1执行
我的问题是这种行为是否实际上是在语言参考中的任何地方定义的.我不确定我为什么__module__要这样做,但是我可以安全地依赖于类创建命名空间,还是所有实现者都决定以同样的方式执行此操作?
1所有linux,但我怀疑这很重要......
文档定义的是类将具有__module__属性.CPython这样做的方式似乎是它__module__在类块的开头定义了一个局部变量.然后,该变量成为类别归属,就像那里定义的任何其他变量一样.
我找不到任何__module__必须以这种方式定义的文档.特别是,我找不到任何明确说明属性必须在类体中定义为局部变量的文档,而不是在类创建的后期阶段将其指定为类属性. 这个对不同问题的回答提到它以这种方式工作,并显示它在字节码中的显示方式.有一个Jython错误,他们通过使其工作与CPython相同来修复.
我猜这是一个CPython实现细节,已经转移到其他实现.据我所知,文档实际上并没有说__module__必须在类体内可用,之后只在类对象上.
| 归档时间: |
|
| 查看次数: |
1264 次 |
| 最近记录: |