看板 Python 關於我們 聯絡資訊
我在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
ckc1ark: self.OC=value.out 這行一樣會call進__setattr__ 12/18 02:40
kdjf: 感謝,我糊塗了 12/18 08:00
kdjf: 卡在想產生新變數時更新內容,但setattr在舊變數也會觸發 12/18 08:03
kdjf: 發現直接寫入__dict__也可以,不過可能不安全 (?) 12/18 08:13
ckc1ark: 改成 super().__setattr__('OC', value.out) 這樣? 12/19 01:15
kdjf: 嗯嗯我是這樣改,可用了 12/21 09:42