鱼C论坛

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

[已解决]看代码

[复制链接]
发表于 2019-1-5 16:05:34 | 显示全部楼层 |阅读模式

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

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

x
class Rectangle:
    def __init__(self,width = 0,height = 0):
        self.width = width
        self.height = height
    def __setattr__(self,name,value):
        if name == 'square':
            self.width = value
            self.height = value
        else:
            super().__setattr__(name,value)
            self.name = value
    def getArea(self):
        return self.width * self.height

这个代码有啥毛病  运行一直报错
最佳答案
2019-1-5 16:24:29
这个问题出现在那个else语句,因为初始化为一个举行对象赋宽高的初始值,会调用__setAttr__方法,而因为这个属性不是square,会执行else语句,而下面又进行了self.name = value,继续调用该方法,进入了死循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-1-5 16:24:29 | 显示全部楼层    本楼为最佳答案   
这个问题出现在那个else语句,因为初始化为一个举行对象赋宽高的初始值,会调用__setAttr__方法,而因为这个属性不是square,会执行else语句,而下面又进行了self.name = value,继续调用该方法,进入了死循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-5 18:04:40 | 显示全部楼层
爱学习的懒懒君 发表于 2019-1-5 16:24
这个问题出现在那个else语句,因为初始化为一个举行对象赋宽高的初始值,会调用__setAttr__方法,而因为这 ...

不是有super方法吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-5 19:49:08 | 显示全部楼层
a2421480 发表于 2019-1-5 18:04
不是有super方法吗

你是有super方法,但之后不是又调用了self.name = value这条属性赋值语句吗,就是有调用了这个对象的__setattr__方法,产生死循环了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-5 20:52:51 | 显示全部楼层
爱学习的懒懒君 发表于 2019-1-5 19:49
你是有super方法,但之后不是又调用了self.name = value这条属性赋值语句吗,就是有调用了这个对象的__se ...

意思是我要把self.name = value 给删了是吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-4 22:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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