|  | 
 
| 
#要求:写一个矩形类,默认有长和宽两个属性,如果为一个叫Square个属性赋值,
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.height = value
 self.width = value
 else:
 super.__setattr__(name,value)
 def gerara(self):
 return self.height * self.width
 
 问一下为什么这里要调用super函数,这里调用是什么逻辑呢,该作何理解
 
在这段代码中,调用super()函数的作用是调用父类的__setattr__()方法。让我们逐步解释这段代码的作用和调用super()函数的逻辑。
 首先,这段代码定义了一个矩形类rectangle,具有默认的长(width)和宽(height)两个属性。在初始化方法__init__()中,通过self.width = width和self.height = height来为对象的属性赋值。
 
 接下来,重写了__setattr__()方法。当对象的属性被设置时,__setattr__()方法将被调用。在这个方法中,使用了条件判断语句来判断属性的名称。
 
 如果属性的名称是"Square",即设置了一个叫做"Square"的属性,那么说明这是一个正方形,属性值即为正方形的边长。此时,通过self.height = value和self.width = value将宽和高都设为边长。
 
 如果属性的名称不是"Square",则调用super().__setattr__(name, value)来调用父类的__setattr__()方法,用于正常设置其他属性的值。
 
 最后,在方法gerara()中计算矩形面积,即返回self.height * self.width。
 
 在这段代码中,调用super().__setattr__(name, value)的逻辑是为了确保父类的__setattr__()方法仍然被调用,以处理其他非特殊属性的设置。这是因为我们重写了__setattr__()方法,如果不调用父类的方法,就无法正常处理其他属性的赋值操作。
 
 希望能解答你的疑问!如果还有其他问题,请随时提问。
 如果问题已经解决,请设置最佳答案
 | 
 |