Python 属性访问顺序
Python 属性访问顺序
实例属性访问顺序
- 类的
__getattribute__()
方法 - 类的数据描述符:(定义了描述符方法)(若人为的重载了该
__getattribute__()
方法,可能会导致无法调用描述符) - 实例的属性字典(若与描述符对象同名,会被覆盖哦)
- 类的非数据描述符(只定义了
__get__()
方法,而没有定义__set__()
,__delete__()
方法) - 类的属性字典
- 类的
__getattr__()
方法
类属性访问顺序
假设类为元类的实例,相比于实例多了一个类数据描述符的查找。
- 元类的
__getattribute__()
方法 - 元类的数据描述符
- 类的数据描述符
- 类的属性字典
- 元类的非数据描述符
- 元类的属性字典
- 元类的
__getattr__()
方法