作者Arim (Arim5566)
看板Python
標題[問題] setattr沒辦法修改屬性值
時間Sun Oct 7 14:48:12 2012
各位版友好:
如果我有一個
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)
→ kdjf:你if有用self.__dict__[name]=value, 為什麼elif就不用了XD 10/07 15:36
→ kdjf:XDDD 10/07 15:36
我一開始以為name會自動代換成p1或p2 = =
不過setattr真的滿好用的XD
推 ckclark:把display變成method如何 10/07 17:23
※ 編輯: Arim 來自: 114.47.143.204 (10/07 21:09)
※ 編輯: Arim 來自: 114.47.143.204 (10/07 21:11)
推 swpoker:當然沒修改到p1~因為指定給name了 10/08 17:07
→ swpoker:你這寫不好~你要把p1跟p2的結果用一個方法來得出 10/08 17:08
把p1跟p2的結果用一個方法得出是甚麼意思?
※ 編輯: Arim 來自: 36.238.83.249 (10/10 22:10)