作者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)
1F:→ kdjf:你if有用self.__dict__[name]=value, 为什麽elif就不用了XD 10/07 15:36
2F:→ kdjf:XDDD 10/07 15:36
我一开始以为name会自动代换成p1或p2 = =
不过setattr真的满好用的XD
3F:推 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)
4F:推 swpoker:当然没修改到p1~因为指定给name了 10/08 17:07
5F:→ swpoker:你这写不好~你要把p1跟p2的结果用一个方法来得出 10/08 17:08
把p1跟p2的结果用一个方法得出是甚麽意思?
※ 编辑: Arim 来自: 36.238.83.249 (10/10 22:10)