请注意,
__dict__自定义Python类实例的属性是描述符 ; 实例本身没有属性,它是提供它的类(因此type(instance).__dict__['__dict__'].__get__(instance)返回).object.__dict__可能存在,但object.__dict__['__dict__']不存在.
为什么__dict__自定义Python类实例的属性是类的描述符,而不是实例的实际属性?
很可能会说它__dict__必须是一个描述符,因为__dict__将它作为一个条目实现会要求你在找到它__dict__之前找到它__dict__,但是Python已经绕过了正常的属性查找,以便__dict__在查找其他属性时查找,所以这并不像它最初听起来.如果每个描述符都被一个'__dict__'键替换__dict__,__dict__那么仍然可以找到.
还有通过没有一键一些节省空间'__dict__'的每一个__dict__,但是这不是很大的原因.通过不设置'__dict__'密钥节省了时间,并且通过不创建循环引用节省了时间和空间,并且这些好处都非常好,但它们仍然可能比下一个更小.
需要__dict__成为描述符的重要事情是处理重新分配或删除对象的尝试__dict__.如果属性查找__dict__通过一个__dict__键,那么重新分配someobj.__dict__将重新分配dict键而不改变Python实际查找的dict以查找someobj属性.__dict__需要成为描述符,以便它与Python查找对象的dict的实际C级结构槽保持同步.
| 归档时间: |
|
| 查看次数: |
314 次 |
| 最近记录: |