[問題] setattr修改屬性值

看板Python作者 (Arim5566)時間13年前 (2012/10/07 14:48), 編輯推噓2(203)
留言5則, 3人參與, 最新討論串1/1
各位版友好: 如果我有一個 class Line: def __init__(self,p1,p2): self.p1 = p1 self.p2 = p2 self.display = self.p1.display+" "+self.p2.display def __setattr__(self, name, value): if not name in self.__dict__: self.__dict__[name] = value elif name == 'p1' or name == 'p2': self.name = value self.display = self.p1.display+" "+self.p2.display 我想要當修改到p1或p2的時候(ex:self.p1=new_p1),就會同時修改到display 所以就加了__setattr__ 但是很奇怪的是 例如我用 self.p1=Point1 他的確有呼叫__setattr__,也有執行self.name=value 但是呼叫完之後我的p1還是沒有被修改到 請問這是為什麼呢? 謝謝 -- ~宅男的四個徵兆~ ∠□ ○ ! * \○/ ★    (○ ? ╦╦└□ " ○□═ □   □> ║║√√ ╦══╦ ∥    |\ 一回家就上PTT 每天想正妹 以當好人為樂 忘記正妹虧欠自己 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.47.143.204 ※ 編輯: Arim 來自: 114.47.143.204 (10/07 14:55) 改成self.__dict__[name]=value就可以了XD 不知道還有沒有更好的方法? ※ 編輯: Arim 來自: 114.47.143.204 (10/07 15:35) ※ 編輯: Arim 來自: 114.47.143.204 (10/07 15:35)

10/07 15:36, , 1F
你if有用self.__dict__[name]=value, 為什麼elif就不用了XD
10/07 15:36, 1F

10/07 15:36, , 2F
XDDD
10/07 15:36, 2F
我一開始以為name會自動代換成p1或p2 = = 不過setattr真的滿好用的XD

10/07 17:23, , 3F
把display變成method如何
10/07 17:23, 3F
※ 編輯: Arim 來自: 114.47.143.204 (10/07 21:09) ※ 編輯: Arim 來自: 114.47.143.204 (10/07 21:11)

10/08 17:07, , 4F
當然沒修改到p1~因為指定給name了
10/08 17:07, 4F

10/08 17:08, , 5F
你這寫不好~你要把p1跟p2的結果用一個方法來得出
10/08 17:08, 5F
把p1跟p2的結果用一個方法得出是甚麼意思? ※ 編輯: Arim 來自: 36.238.83.249 (10/10 22:10)
文章代碼(AID): #1GSIMlgX (Python)
文章代碼(AID): #1GSIMlgX (Python)