1

假设我们要获取一个对象的属性:smth = object.attr。还假设我们已经知道我们的属性位于哪个对象中,假设它是名为 A 的类。

据我所知,属性获取过程如下所示:

attr = A.__dict__['attr']      # 1
if hasattr(attr, '__get__'):   # 2
    return attr.__get__(None, A)
else: 
    return attr
  1. 在 A 类的属性字典中找到描述符。
  2. 如果存在,则返回属性的 getter 的输出。否则,返回属性本身。

我在这里看到一个问题。假设我们的属性是一个带有 getter 的描述符。在这种情况下,要解析object.descriptor,我们必须解析descriptor.__get__哪个是非数据描述符(函数),也需要解析。这个递归的终点在哪里?

4

0 回答 0