___setattr__魔方方法一定要註意防止無限遞歸當在此方法內部給屬性賦值的時候,那會調用此方法,又會重新賦值,無限重覆最後要歸於super是種解決方法。或者用dict方法。 1 class Recangle: 2 def __init__(self,width = 0,heigh = 0): ...
___setattr__魔方方法
一定要註意防止無限遞歸
當在此方法內部給屬性賦值的時候,那會調用此方法,又會重新賦值,無限重覆
最後要歸於super是種解決方法。或者用dict方法。
1 class Recangle: 2 def __init__(self,width = 0,heigh = 0): 3 self.width = width 4 self.heigh = heigh 5 6 def __setattr__(self,name,value): 7 if name == 'square': 8 self.width = value 9 self.heigh = value 10 else: 11 print('else被執行了') 12 super().__setattr__(name,value) 13 14 15 def getArea(self): 16 return self.width * self.heigh 17 18 a = Recangle(4,5) 19 print(a.getArea()) 20 a.square = 10 21 print(a.getArea()) 22 a.width = 100 23 print(a.getArea()) 24 25
###運行結果 else被執行了 else被執行了 20 else被執行了 else被執行了 100 else被執行了 1000