天下有敌 发表于 2020-6-17 09:28:00

p46 魔法方法属性访问问题

本帖最后由 天下有敌 于 2020-6-17 10:25 编辑

为什么黄框内的 self.name = value   会触发魔法方法 __setattr__      所以无限递归调用基类魔法方法就没事了
那红框内的赋值操作怎么就不会 触发魔法方法导致无限递归呢?


顺便问一下怎么删帖删评论?

Twilight6 发表于 2020-6-17 09:34:30

如果按照你图片上的代码两个情况都会递归,

Twilight6 发表于 2020-6-17 09:42:17

本帖最后由 Twilight6 于 2020-6-17 09:43 编辑

楼主看看这个帖子吧,和你这个情况是一样的 , 只是你的多了个 if 判断 但是赋值时候都会导致一直执行 else 而造成无限递归


https://fishc.com.cn/forum.php?mod=redirect&goto=findpost&ptid=172325&pid=4767270


只要帖子有评论,就不能删帖 删评论 ,话说为什么要删评论?


是不喜欢我来解答是吗?

天下有敌 发表于 2020-6-17 09:47:03

Twilight6 发表于 2020-6-17 09:34
如果按照你图片上的代码两个情况都会递归,

不会,我试过

天下有敌 发表于 2020-6-17 09:48:25

Twilight6 发表于 2020-6-17 09:42
楼主看看这个帖子吧,和你这个情况是一样的 , 只是你的多了个 if 判断 但是赋值时候都会导致一直执行 else ...

不是,主要是我的悬赏帖,我自己查资料解决了,我想把悬赏的鱼币搞回来

Twilight6 发表于 2020-6-17 09:49:19

天下有敌 发表于 2020-6-17 09:47
不会,我试过

会的   你去掉 self.name = value 才不会无限递归 否则 就是会无限递归

heidern0612 发表于 2020-6-17 09:49:44

你只要有传值或赋值的操作,这个方法就会被自动调用。

所以说修改类的底层是很危险的,用途也少,不用钻牛角尖,继续往后学就行。

Twilight6 发表于 2020-6-17 09:49:57

本帖最后由 Twilight6 于 2020-6-17 09:51 编辑

天下有敌 发表于 2020-6-17 09:48
不是,主要是我的悬赏帖,我自己查资料解决了,我想把悬赏的鱼币搞回来

你这个是单纯的求助帖子,是没有设置悬赏的

而且这些问题发普通求助帖就好,不用设悬赏也会有鱼油来解答的


天下有敌 发表于 2020-6-17 10:00:54

Twilight6 发表于 2020-6-17 09:49
你这个是单纯的求助帖子,是没有设置悬赏的

而且这些问题发普通求助帖就好,不用设悬赏也会有鱼油来 ...

我有一个悬赏帖,你看我主页的主题有一个。

Twilight6 发表于 2020-6-17 10:02:16

天下有敌 发表于 2020-6-17 10:00
我有一个悬赏帖,你看我主页的主题有一个。

这个没办法了没事 我鱼币多 刚刚补你 5 个了

天下有敌 发表于 2020-6-17 10:20:32

Twilight6 发表于 2020-6-17 09:49
会的   你去掉 self.name = value 才不会无限递归 否则 就是会无限递归

我就是想问为什么去掉self.name = value就不会无限递归了,self.width = value   self.height = value就不会无限递归

Twilight6 发表于 2020-6-17 10:27:43

天下有敌 发表于 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]
查看完整版本: p46 魔法方法属性访问问题