|
发表于 2020-5-3 10:45:42
|
显示全部楼层
本帖最后由 Twilight6 于 2020-5-3 10:54 编辑
不是优先级问题,当你直接单独a.x 时候是不可能调用__get__方法的
get方法是要在一个类实例里存在这另一个类(这个类里面定义了__get__方法,也称描述符),从这个a实例去访问此实例中的另一个实例(描述符)中的属性,才会调用get。
(上面可能存在很多语法错误,因为我只是把我的理解说出,但是大体上意思就是这样)
- class A:
- x = 666
- def __get__(self, instance, owner):
- print('get~')
- def __getattribute__(self, item):
- print('getattribute')
- class B:
- a = A()
- a = A()
- b = B()
- a.x # 通过实例访问属性,都会经过__getattribute__函数。而当该属性不存在时,仍会先访问__getattribute__,但是之后还会接着要访问__getattr__ ,弹出异常。
- b.a.x # 每次访问描述符(descriptor)(即定义了__get__的类),都会先经过__get__函数。
复制代码
|
|