假设我们想要获取对象的属性:smth = object.attr
。
还假设我们已经知道属性所在的对象,让它成为名为A的类。
据我所知,属性获取过程如下所示:
attr = A.__dict__['attr'] # 1
if hasattr(attr, '__get__'): # 2
return attr.__get__(None, A)
else:
return attr
我在这里看到一个问题。假设我们的属性是带有getter的描述符。在这种情况下,要解决object.descriptor
,我们必须解决descriptor.__get__
,而override
又是非数据描述符(函数),也需要解决。这次递归的结束在哪里?