[問題] 使用__dict__["__setattr__"]取代現有的類別函數
操作物件內的__dict__字典相當於操作物件內的屬性存取. 雖然仍有些不同.
obj.__dict__[name] = value # obj.name = value
然而以 obj.__dict__["__setattr__"] = new_fn 來取代現有的 __setattr__ 時
遇到一個問題(使用python2.6):
class aKlass:
var = 0
def a_fn(self):
print "aKlass.a_fn"
def __setattr__(self, name, value):
print "aKlass.__setattr__",name,value
def new_a_fn(self):
print "new_a_fn"
def new_setattr_fn(self,name,value):
print "new_setattr_fn",name,value
aKlass內含兩個函數, a_fn, __setattr__.
另準備兩個對應的函數new_a_fn, new_setattr_fn
希望使用aKlass.__dict__[ ]的方式取代 --
aObj = aKlass()
aObj.a_fn()
aKlass.__dict__["a_fn"] = new_a_fn
aObj.a_fn()
aObj.var = 1
aKlass.__dict__["__setattr__"] = new_setattr_fn
aObj.var = 1
執行結果:
aKlass.a_fn
new_a_fn
aKlass.__setattr__ var 1
aKlass.__setattr__ var 1
aKlass.__dict__["a_fn"] = new_a_fn 的確用new_a_fn取代了原先的a_fn.
但似乎 aKlass.__dict__["__setattr__"] = new_setattr_fn 沒有達到預期的效果.
不知原因為何?
(雖然使用 setattr(aKlass,"__setattr__",new_setattr_fn) 就可以取代原函數了.)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 211.20.60.207
推
12/11 06:08, , 1F
12/11 06:08, 1F
→
12/11 06:09, , 2F
12/11 06:09, 2F
→
12/11 06:10, , 3F
12/11 06:10, 3F
推
12/11 06:46, , 4F
12/11 06:46, 4F
→
12/11 06:47, , 5F
12/11 06:47, 5F
→
12/11 06:48, , 6F
12/11 06:48, 6F
→
12/11 16:58, , 7F
12/11 16:58, 7F
→
12/11 16:59, , 8F
12/11 16:59, 8F