我知道您在重新定义 setattr 方法时应该注意,您可以循环结束。
我知道有两种避免循环的解决方案:
1)使用对象超类,调用:
object.__setattr__(instance,attr,value)
2)使用类dict:
self.__dict__[attr] = value
我的问题是,__dict__
解决方案是否也不应该循环?为什么不呢?
是因为我们正在调用__setattr__
对象的__dict__
(一切都是对象)还是什么?
如果是这样,它不应该对所有事情都一样吗?
答案 0 :(得分:5)
为什么你会期望它最终进入循环?
instance.__dict__[attr] = value
基本上是object.__setattr__(instance,attr,value)
所做的(对于普通属性)。请注意,__dict__[attr] = whatever
根本不会调用__setattr__
。它会调用 __setitem__
,这完全是另一种方法。