【问题求助】关于小甲鱼在06年python教学视频中的代码的疑惑
因为不能上图,我只能手打说明了在【045 魔法方法 属性访问】中,一次关于__attribute__的无限循环的演示中
代码:
class Rectangle:
def __init__(self, width = 0, height = 0):
self.width = 0
self.height = 0
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
当输入square=10时,为什么不会进入无限循环了,我走不出来了。麻烦哪位大佬指点一下。
这里代码都不会进入无限递归的,而且你代码的 __init__ 有些错误, self.width 应该等于 width 而不是 0 ,self.height 也是同理
class Rectangle:
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 关于小甲鱼在06年python如果没记错的话 06 年没有 鱼C…… 哦哦
我代码打错了。。
那为什么不会无限循环呢
之前的else里的赋值无限循环报错了
为什么if里的不会 0与1 发表于 2020-7-13 16:24
那为什么不会无限循环呢
之前的else里的赋值无限循环报错了
为什么if里的不会
因为你调用了父类的__setattr__(name, value) 方法来进行 赋值属性,而不是调用自己的__setattr__(name, value) 方法
这里的super().__setattr__(name, value) 就是调用父类的意思
但是在if里会执行else里的调用父类的语句吗?
liuzhengyuan 发表于 2020-7-13 16:22
如果没记错的话 06 年没有 鱼C……
哈哈,是16年,抱歉抱歉,失误太多了 0与1 发表于 2020-7-13 16:29
但是在if里会执行else里的调用父类的语句吗?
不会 if 会调用自己的 __setattr__ 方法,比如 self.width = value 那么此时调用自己的 __setattr__方法时候
name 变成了 width ,所以执行 else ,重新调用了super().__setattr__(name, value) 来给self.width = value赋值
而 if 里的 self.height = value 也是同理 明白了,谢谢。 小甲鱼在06年没有出 Python 教程
页:
[1]