Python
class juxing: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)
def getarea(self):
return self.width*self.height
这个super调用基类是啥意思。。 本帖最后由 Twilight6 于 2020-7-20 14:20 编辑
super().__setattr__(name,value) 这里严谨的说是调用父类的 __setattr__ 魔法方法,而不能说是基类
而因为你这里 juxing 类没有设置继承的类,所以 Python 默认你继承 object 类,也就是我们说的 基类
基类中有许多魔法方法,所以这里 super().__setattr__(name,value) 也就是调用基类的 __setattr__ 魔法方法
Twilight6 发表于 2020-7-20 14:17
super().__setattr__(name,value) 这里严谨的说是调用父类的 __setattr__ 魔法方法,而不能说是基类
...
这样做有啥用。 breaki 发表于 2020-7-20 14:22
这样做有啥用。
你重新 __setattr__魔法方法,原有的功能会全部被覆盖,如果你重新调用父类的方法,就可以将原有的功能保留下来
这里还有一个作用就是防止无限调用自身的 __setattr__ 魔法方法 Twilight6 发表于 2020-7-20 14:25
你重新 __setattr__魔法方法,原有的功能会全部被覆盖,如果你重新调用父类的方法,就可以将原有的功能 ...
这里为啥不用写self,。 breaki 发表于 2020-7-20 14:33
这里为啥不用写self,。
对于这个代码 super().__setattr__(name,value) 等价于 super(object,self).__setattr__(name,value)
页:
[1]