Python:避免__setattr__循环使用__dict__,不管它不应该循环吗?

时间:2013-05-30 15:59:28

标签: python loops setattr

我知道您在重新定义 setattr 方法时应该注意,您可以循环结束。

我知道有两种避免循环的解决方案:

1)使用对象超类,调用:

object.__setattr__(instance,attr,value)

2)使用类dict:

self.__dict__[attr] = value

我的问题是,__dict__解决方案是否也不应该循环?为什么不呢?

是因为我们正在调用__setattr__对象的__dict__(一切都是对象)还是什么?

如果是这样,它不应该对所有事情都一样吗?

1 个答案:

答案 0 :(得分:5)

为什么你会期望它最终进入循环?

instance.__dict__[attr] = value基本上是object.__setattr__(instance,attr,value)所做的(对于普通属性)。请注意,__dict__[attr] = whatever 根本不会调用__setattr__它会调用 __setitem__ ,这完全是另一种方法。