Python 属性访问顺序

Python 属性访问顺序

实例属性访问顺序

  • 类的 __getattribute__() 方法
  • 类的数据描述符:(定义了描述符方法)(若人为的重载了该 __getattribute__() 方法,可能会导致无法调用描述符)
  • 实例的属性字典(若与描述符对象同名,会被覆盖哦)
  • 类的非数据描述符(只定义了 __get__() 方法,而没有定义 __set__(), __delete__() 方法)
  • 类的属性字典
  • 类的 __getattr__() 方法

类属性访问顺序

假设类为元类的实例,相比于实例多了一个类数据描述符的查找。

  • 元类的 __getattribute__() 方法
  • 元类的数据描述符
  • 类的数据描述符
  • 类的属性字典
  • 元类的非数据描述符
  • 元类的属性字典
  • 元类的 __getattr__() 方法

Reference