混淆python属性获取进程:无限递归?

时间:2015-11-06 13:11:59

标签: python recursion attributes attr new-style-class

假设我们想要获取对象的属性: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的输出(如果有)。否则,返回属性本身。
  3. 我在这里看到一个问题。假设我们的属性是带有getter的描述符。在这种情况下,要解决object.descriptor,我们必须解决descriptor.__get__,而override又是非数据描述符(函数),也需要解决。这次递归的结束在哪里?

0 个答案:

没有答案