[問題] override __setattr__碰到怪狀況

看板Python作者 (我抓得到什麼呢?)時間3年前 (2020/12/18 01:34), 編輯推噓2(203)
留言5則, 2人參與, 3年前最新討論串1/1
我在override __setattr__時不知道為什麼沒辦法assing某個變數 錯誤訊息也很怪 >>> class pin(int): ... def __new__(cls,pin,inv,oc,out): ... i=int.__new__(cls,1<<pin) ... i.pin=pin ... i.inv=inv<<pin ... i.oc=oc<<pin ... i.out=out<<pin ... return(i) ... >>> class port(): ... OC=0 ... OUT=0 ... def __setattr__(self,name,value): ... # self.OC=value.oc ... # self.OUT=value.out ... print(value.out) ... self.OC=value.out ... print(value.out) ... super().__setattr__(name, value) ... >>> P=port() >>> M=pin(pin=0,inv=1,oc=0,out=1) >>> P.M=M 1 Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 8, in __setattr__ File "<stdin>", line 7, in __setattr__ AttributeError: 'int' object has no attribute 'out' >>> 看起來是value.out不存在,但是print(value.out)是正常的? 還是其實是super那行報的錯? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.240.134.33 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1608226498.A.C54.html

12/18 02:40, 3年前 , 1F
self.OC=value.out 這行一樣會call進__setattr__
12/18 02:40, 1F

12/18 08:00, 3年前 , 2F
感謝,我糊塗了
12/18 08:00, 2F

12/18 08:03, 3年前 , 3F
卡在想產生新變數時更新內容,但setattr在舊變數也會觸發
12/18 08:03, 3F

12/18 08:13, 3年前 , 4F
發現直接寫入__dict__也可以,不過可能不安全 (?)
12/18 08:13, 4F

12/19 01:15, 3年前 , 5F
改成 super().__setattr__('OC', value.out) 這樣?
12/19 01:15, 5F
文章代碼(AID): #1VsvR2nK (Python)