|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
在第45节中,有如下代码,定义了一个矩形的类。初始化时给出长和宽。
赋值操作中:如果给一个叫做“square”的属性赋值时,那么知道是正方形,则长和宽都等于新的值 value
如果不是,则正常赋值
class FF:
def __init__(self,x,y):
self.l = x
self.w = y
def __setattr__(self,nn,value):
if nn == 'square' :
self.l = value
self.w = value
else:
#self.nn = value
super().__setattr__(nn,value)
#求面积
def getarea(self):
return self.l * self.w
在else语句中,用super语句替换了代码中被注释掉的那一行。否则在实例化时就会变成死循环。
比如:t = FF(3,6), 在init魔法方法中,self.l = 3 ,那么触发setattr魔法方法,执行else语句 : self.l =3 ,那么又触发 setattr魔法方法,一直这样循环。
我的问题 :
当执行 t.square = 10 , 也就是将这个矩形定义为正方形。这个赋值为什么不触发死循环呢 ?
我的想法:
当执行if语句的 self.l =10 ,不是和上面一样,再次触发setattr魔法方法吗 ?
那么大神有空,帮忙解答一下,万分感谢 |
|