zoukankan      html  css  js  c++  java
  • python属性查找

    python中执行obj.attr时,将调用特殊方法obj.__getattribute__('attr'),该方法执行搜索来查找该属性,通常涉及检查特性、查找实例字典、查找类字典以及搜索基类。如果搜索过程失败,最终会尝试调用类的__getattr__()方法。如果这也失败,则抛出AttributeError异常。

    具体步骤如下:

    1.如果attr是个特殊属性(例如python提供的),直接返回。

    2.在obj.__class__.__dict__即类字典中查找attr,如果attr是个data描述符,则返回数据描述符的__get__方法结果。如果没有,则继续在obj.__class__的基类中寻找data描述符。注意要确定为data描述符,只实现了__get__方法的non-data描述符优先级是在后面的。

    3.在obj.__dict__即实例字典中查找,找到就直接返回。如果是obj是一个类,依次在obj和它的基类的__dict__中查找,如果找到一个descriptor就返回descriptor的__get__方法的结果,否则直接返回attr。如果没有找到,进行下一步。

    4.在obj.__class__.__dict__即类字典中查找,如果找到了一个non-data描述符,则返回描述符的__get__方法的结果。如果找到一个普通属性,直接返回属性值。在obj基类中执行同样的查找。

    5.Raise AttributeError

    总体上,先检查对象的数据描述符,然后检查实例字典,在检查类和基类的非数据描述符,最后是类字典和基类的字典。

  • 相关阅读:
    css 之优先策略
    SpringCloud WebUploader 分块上传
    SpringBoot WebUploader 分块上传
    java WebUploader 分块上传
    php WebUploader 分块上传
    jsp WebUploader 分块上传
    csharp WebUploader 分块上传
    c# WebUploader 分块上传
    .net WebUploader 分块上传
    c#.net WebUploader 分块上传
  • 原文地址:https://www.cnblogs.com/linxiyue/p/3861541.html
Copyright © 2011-2022 走看看