Python中属性查找机制的描述如下:
- 描述符方法:如果一个类的属性是由描述符定义的(即实现了
__get__()
、__set__()
或__delete__()
方法),Python会首先调用相应的描述符方法。例如,如果一个属性有__get__()
方法,当读取该属性时,Python会调用这个__get__()
方法。 - 实例字典:如果属性没有通过描述符定义,Python接下来会查看对象的实例字典(
__dict__
)。如果属性在实例字典中找到,其值就会被返回。 - 类属性:如果在实例字典中没有找到该属性,Python还会在该对象的类中查找。如果类或其任何基类中定义了该属性,该值就会被返回。
__getattr__()
方法:最后,如果前面的步骤都没有找到属性,且类定义了__getattr__()
方法,这个方法会被调用。