失败且常态 发表于 2023-1-2 19:04:54

__setattr__()问题

请问为什么这里的
self.width = value 和 self.height = value没有出现无限递归的情况

isdkz 发表于 2023-1-2 19:09:22

因为当 name 是 square 的时候才会执行 self.width = value 和 self.height = value,

而 self.width 和 self.height 中的 name 分别为 width 和 height ,这时候走的是 else 分支,

else 中调用的是父类的 __setattr__ ,所以最多会递归一次而不会出现无限递归。

失败且常态 发表于 2023-1-2 19:52:28

isdkz 发表于 2023-1-2 19:09
因为当 name 是 square 的时候才会执行 self.width = value 和 self.height = value,

而 self.width 和 ...

那请问,当它等于square的时候又为什么没有无限递归

isdkz 发表于 2023-1-2 21:03:41

失败且常态 发表于 2023-1-2 19:52
那请问,当它等于square的时候又为什么没有无限递归

我上面不是回答了你的问题了吗?当 name 是 square 的时候才会走 if 分支呀,然后触发一次递归走了 else 分支,自然就不会继续递归下去了

tommyyu 发表于 2023-1-3 09:44:11

失败且常态 发表于 2023-1-2 19:52
那请问,当它等于square的时候又为什么没有无限递归

它等于square的时候,会将self.width和self.height赋值为value,此时再次触发__setattr__方法,但是由于赋值的是width和value,此时的两处赋值就会到else分支里,也就不会出现无限递归。
页: [1]
查看完整版本: __setattr__()问题