【问题标题】:Python: avoid __setattr__ loop using __dict__, shouldn't it loop anyway?Python:使用 __dict__ 避免 __setattr__ 循环,它不应该循环吗?
【发布时间】:2013-05-30 15:59:28
【问题描述】:

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

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

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

object.__setattr__(instance,attr,value)

2) 使用类字典:

self.__dict__[attr] = value

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

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

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

【问题讨论】:

  • a[b] = c 没有设置属性。它设置一个项目。这在概念上和 w.r.t 上都是不同的。涉及的方法不同。

标签: python loops setattr


【解决方案1】:

您为什么希望它以循环结束?

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

【讨论】:

  • 它也在一个完全不同的对象上调用它。
  • @delnan -- 是的。当然,使用__getattribute__ 可以使用self.__dict__ 进入无限循环,但是...
  • 所以是因为正在调用 setitem 还是因为是不同的对象?谢谢大家
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 2021-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-05
相关资源
最近更新 更多