Ric*_*ica 20 python metaclass namedtuple python-internals
几周前我花了一些时间调查这个collections.namedtuple模块.该模块使用工厂函数将动态数据(新namedtuple类的名称和类属性名称)填充到一个非常大的字符串中.然后exec使用字符串(表示代码)作为参数执行,并返回新类.
有没有人知道为什么这样做,当有一种特定的工具可供现有的这种东西,即元类?我自己没有尝试过这样做,但似乎namedtuple模块中发生的一切都可以使用namedtuple元类轻松完成,如下所示:
class namedtuple(type):
Run Code Online (Sandbox Code Playgroud)
等等
vau*_*tah 19
问题3974中有一些提示.作者提出了一种创建命名元组的新方法,该方法被拒绝并带有以下注释:
由于对关键方法进行了硬编码,原始版本的好处似乎是速度更快. - Antoine Pitrou
使用exec没有什么不圣洁的.早期版本使用其他方法,并且它们被证明是不必要的复杂并且具有意外问题.它是命名元组的一个关键特性,它们完全等同于手写类. - Raymond Hettinger
另外,这是原始namedtuple配方描述的一部分:
...这个配方已经发展到现在的exec风格,我们可以免费获得所有Python的高速内置参数检查.构建和执行模板的新风格使__new__和__repr__函数比此配方的先前版本更快更干净.
如果您正在寻找一些替代实现:
| 归档时间: |
|
| 查看次数: |
1274 次 |
| 最近记录: |