|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- class Rectangle:
- def __init__(self,width=0,height=0):
- #发生赋值操作则会自动触发__setattr__(r1,width,0)
- self.width=width
- self.height=height
- #赋值会触发setattr;else语句中的self.name会出现自动递归的情况
- def __setattr__(self,name,value):
- if name=='square':
- self.width=value
- self.height=value
- else:
- super().__setattr__(name,value)#super()就是self参数不用写在括号里
- #获得面积
- def getArea(self):
- return self.width*self.height
-
复制代码
我想问一下在整个__setattr__的方法中的else语句里面,是小甲鱼课堂上已经做过修改的之后的代码改之前这一句是:self.time=value错误的原因是:发生赋值操作自动会触发__setattr__于是就陷入了无限的递归。我想问一下在该方法下面的if语句下面还有一个self.width,self.height的赋值操作为什么这两个语句就不用担心会触发该方法再无限递归下去呢?
不会啊,你其实如果理解了我上面的例子,你就会理解这个
当你初始化了一个变量叫 square ,会自动调用 __setattr__方法 if 判断条件成立,赋值 :
self.width = value
self.height = value
然后其实赋值 就是赋值了 self.width,self.height 重新调用 __setattr__方法,这次 因为 name 都不为 square 所以执行else ,就成功赋值了呀?
不会无限递归,你先理解好我 4 L 的,自然会理解这个
|
|