我之前没有问题就改变了其他类的属性。 _Element显然不是内置的。
from lxml.etree import _Element
_Element.new_attr = 54
结果:
TypeError:无法设置内置/扩展类型的属性' lxml.etree._Element'
答案 0 :(得分:0)
'(\s*)(.*?)(\s*)'
是implemented in Cython。作为Steve Holden explains(我的重点),
问题是扩展类型的属性由确定 对象的插槽的布局并永远固定在C代码中 实现它们:无法扩展插槽,因此无法添加 属性即可。这是一个效率特性:它将非常慢 使用后期绑定查找基本类型的属性(它也会 改变语言的本质,使其更像Ruby或 自)。
和Guido van Rossum解释了为什么this is by-design:
这是故意禁止意外致命的变化 内置类型(致命的部分代码,你从来没有 的)。此外,它是为了防止更改影响不同 自内置类型以来驻留在地址空间中的解释器 (与用户定义的类不同)在所有这些之间共享 解释器。
答案 1 :(得分:0)
_Element
类来自Cython编译的二进制模块。这些不是Python第一公民对象,您不能向这些对象添加任意属性。