|
发表于 2019-10-31 10:31:48
|
显示全部楼层
__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__,就不再循环调用了 |
|