|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#要求:写一个矩形类,默认有长和宽两个属性,如果为一个叫Square个属性赋值,
# 那么说明这是一个正方形,值就是正方形的边长,此时的宽和高都应该等于边长
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__()方法,如果不调用父类的方法,就无法正常处理其他属性的赋值操作。
希望能解答你的疑问!如果还有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案
|
|