p46 魔法方法属性访问问题
本帖最后由 天下有敌 于 2020-6-17 10:25 编辑为什么黄框内的 self.name = value 会触发魔法方法 __setattr__ 所以无限递归调用基类魔法方法就没事了
那红框内的赋值操作怎么就不会 触发魔法方法导致无限递归呢?
顺便问一下怎么删帖删评论?
如果按照你图片上的代码两个情况都会递归, 本帖最后由 Twilight6 于 2020-6-17 09:43 编辑
楼主看看这个帖子吧,和你这个情况是一样的 , 只是你的多了个 if 判断 但是赋值时候都会导致一直执行 else 而造成无限递归
https://fishc.com.cn/forum.php?mod=redirect&goto=findpost&ptid=172325&pid=4767270
只要帖子有评论,就不能删帖 删评论 ,话说为什么要删评论?
是不喜欢我来解答是吗?
Twilight6 发表于 2020-6-17 09:34
如果按照你图片上的代码两个情况都会递归,
不会,我试过 Twilight6 发表于 2020-6-17 09:42
楼主看看这个帖子吧,和你这个情况是一样的 , 只是你的多了个 if 判断 但是赋值时候都会导致一直执行 else ...
不是,主要是我的悬赏帖,我自己查资料解决了,我想把悬赏的鱼币搞回来 天下有敌 发表于 2020-6-17 09:47
不会,我试过
会的 你去掉 self.name = value 才不会无限递归 否则 就是会无限递归 你只要有传值或赋值的操作,这个方法就会被自动调用。
所以说修改类的底层是很危险的,用途也少,不用钻牛角尖,继续往后学就行。 本帖最后由 Twilight6 于 2020-6-17 09:51 编辑
天下有敌 发表于 2020-6-17 09:48
不是,主要是我的悬赏帖,我自己查资料解决了,我想把悬赏的鱼币搞回来
你这个是单纯的求助帖子,是没有设置悬赏的
而且这些问题发普通求助帖就好,不用设悬赏也会有鱼油来解答的
Twilight6 发表于 2020-6-17 09:49
你这个是单纯的求助帖子,是没有设置悬赏的
而且这些问题发普通求助帖就好,不用设悬赏也会有鱼油来 ...
我有一个悬赏帖,你看我主页的主题有一个。 天下有敌 发表于 2020-6-17 10:00
我有一个悬赏帖,你看我主页的主题有一个。
这个没办法了没事 我鱼币多 刚刚补你 5 个了 Twilight6 发表于 2020-6-17 09:49
会的 你去掉 self.name = value 才不会无限递归 否则 就是会无限递归
我就是想问为什么去掉self.name = value就不会无限递归了,self.width = value self.height = value就不会无限递归 天下有敌 发表于 2020-6-17 10:20
我就是想问为什么去掉self.name = value就不会无限递归了,self.width = value self.height = valu ...
因为你self.name = value 时候会导致你触发 __setattr__
而触发__setattr__ 然后又开始判断 if 此时name 不为 square然后又执行 else 里面的 语句
调用父类成功赋值完后 又遇到self.name = value然后 又进入__setattr__ ....就是这样无限循环
而去掉 self.name = value 呢?
那么就只调用了 super() 的父类方法 里面没有继续赋值 也就不会产生递归
而 self.width 赋值 因为 width 不等于 square 然后 调用 else 后 只调用了 super() 的父类方法 然后就结束了
并不会导致递归
页:
[1]