爲了特定的調試目的,我想包裝一個任意對象的函數來執行額外的任務,如將對象的最後一個值寫入文件。猴子補丁__del__到新函數
理想我想寫 猴(x)的 ,它應該意味着,當X被刪除
x的最終值印刷現在我想通德爾是一個類的方法。所以下面是一個開始:
class Test:
def __str__(self):
return "Test"
def p(self):
print(str(self))
def monkey(x):
x.__class__.__del__=p
a=Test()
monkey(a)
del a
但是,如果我想只猴子特定的對象,我想我需要動態地重寫他們的類到一個新的?此外,無論如何,我需要這樣做,因爲我無法訪問內置類型的del?
任何人都知道如何實現它?
這種方法的兩個問題:首先,不會像int或list這樣的堆類型工作,因爲你不能重新賦值它們的'__class__'。其次,類型檢查將導致不同的結果,這取決於對象是否是猴子。這可能會導致非常混亂的錯誤。 – pillmuncher 2011-05-15 20:25:56
你可以分配給__class__?哇,那只是...哇。 – drxzcl 2011-05-15 20:27:19
在我上面的評論中有一個錯字:它應該是'非堆類型'。 – pillmuncher 2011-05-15 20:45:57