a2421480 发表于 2019-1-5 16:05:34

看代码

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,继续调用该方法,进入了死循环

a2421480 发表于 2019-1-5 18:04:40

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

不是有super方法吗

爱学习的懒懒君 发表于 2019-1-5 19:49:08

a2421480 发表于 2019-1-5 18:04
不是有super方法吗

你是有super方法,但之后不是又调用了self.name = value这条属性赋值语句吗,就是有调用了这个对象的__setattr__方法,产生死循环了

a2421480 发表于 2019-1-5 20:52:51

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

意思是我要把self.name = value 给删了是吧
页: [1]
查看完整版本: 看代码