第45讲关于__setattr__递归的疑惑
class Rect:def __init__(self,width=0,hight=0):
self.width = width
self.hight = hight
def __setattr__(self,name,value):
if name = 'zhengfangxing':
self.width = value
self.hight = value
else:
super().__setattr__(name,value)
rect = Rect(4,5)
rect.zhengfangxing = 10
print(self.width)
这个代码中标红的部分,当执行到此代码块的时候按理说不同样会进入死循环么?对属性进行赋值,然后再次调用__setattr__ 方法。。。。。。
求指点迷津! 只有对类的实例化对象赋值的时候才会调用那个类型的__setattr__(注意,不是那个类型里面的变量) 我的理解,第一次,执行zhengfangxing = 100,调用__setattr__,if为True,执行红字部分,而红字部分又调用__setattr__,这时if为False,调用父类的__setattr__,就不再循环调用了。 冬雪雪冬 发表于 2018-8-7 08:26
我的理解,第一次,执行zhengfangxing = 100,调用__setattr__,if为True,执行红字部分,而红字部分又调用 ...
感谢解惑 冬雪雪冬 发表于 2018-8-7 08:26
我的理解,第一次,执行zhengfangxing = 100,调用__setattr__,if为True,执行红字部分,而红字部分又调用 ...
明白了,感谢!!! __init__(self[, ...])构造器,当一个实例被创建的时候调用的初始化方法
__setattr__(self, name, value) 定义当一个属性被设置时的行为
class Rect:
def __init__(self,width=0,hight=0):
self.width = width
self.hight = hight
def __setattr__(self,name,value):
if name = 'zhengfangxing':
self.width = value
self.hight = value
else:
super().__setattr__(name,value)
rect = Rect(4,5)
rect.zhengfangxing = 10
print(self.width)
问题:这个代码中标红的部分,当执行到此代码块的时候按理说不同样会进入死循环么?对属性进行赋值, 然后再次调用__setattr__ 方法
解答:第一次,执行zhengfangxing = 10,调用__setattr__,if为True,执行红字部分,而红字部分又调用__setattr__,这时if为False,调用父类的__setattr__,就不再循环调用了 感谢感谢
页:
[1]