鱼C论坛

 找回密码
 立即注册
查看: 3243|回复: 4

[已解决]__setattr__()问题

[复制链接]
发表于 2023-1-2 19:04:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请问为什么这里的
self.width = value 和 self.height = value没有出现无限递归的情况
最佳答案
2023-1-3 09:44:11
失败且常态 发表于 2023-1-2 19:52
那请问,当它等于square的时候又为什么没有无限递归

它等于square的时候,会将self.width和self.height赋值为value,此时再次触发__setattr__方法,但是由于赋值的是width和value,此时的两处赋值就会到else分支里,也就不会出现无限递归。
屏幕截图 2023-01-02 190244.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-1-2 19:09:22 | 显示全部楼层
因为当 name 是 square 的时候才会执行 self.width = value 和 self.height = value,

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

else 中调用的是父类的 __setattr__ ,所以最多会递归一次而不会出现无限递归。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-2 19:52:28 | 显示全部楼层
isdkz 发表于 2023-1-2 19:09
因为当 name 是 square 的时候才会执行 self.width = value 和 self.height = value,

而 self.width 和 ...

那请问,当它等于square的时候又为什么没有无限递归
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-1-2 21:03:41 | 显示全部楼层
失败且常态 发表于 2023-1-2 19:52
那请问,当它等于square的时候又为什么没有无限递归

我上面不是回答了你的问题了吗?当 name 是 square 的时候才会走 if 分支呀,然后触发一次递归走了 else 分支,自然就不会继续递归下去了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-3 09:44:11 | 显示全部楼层    本楼为最佳答案   
失败且常态 发表于 2023-1-2 19:52
那请问,当它等于square的时候又为什么没有无限递归

它等于square的时候,会将self.width和self.height赋值为value,此时再次触发__setattr__方法,但是由于赋值的是width和value,此时的两处赋值就会到else分支里,也就不会出现无限递归。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-25 03:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表