2011-10-23 69 views
1

考慮我在Python模塊a.py下面的代碼:修補本地實例

def func(): 
    obj = Obj() 
    # Some code that uses obj 

有沒有辦法猴子補丁obj沒有使它函數參數?

原因:在代碼本身的背景下,它不應該是一個參數,但是在使用代碼進行測試和系統仿真的情況下,補丁是合理的。同樣在各種情況下,我可能需要修補不同的本地對象,並將它們作爲參數放置在單調乏味的地方。

+0

你可能過於複雜了,看看控制原理的倒置。我仍然對Python如何實現這一點感興趣。 –

+0

很可能:)雖然應用程序很複雜,所以我有一些藉口...我仍然想知道如何monkeypatching可以完成,它可以節省我很多工作太 – Jonathan

回答

2
# if func() is defined in `a.py` 
import a 

oldObj, a.Obj = a.Obj, MockObj 
a.func() 
a.Obj = oldObj 
+0

你能鏈接到幫助這個包?由於某種原因,我找不到它... – Jonathan

+0

所以他說的是:導入模塊與你的功能和猴子補丁類,而不是變量。 –

+0

哦......但是如果我只需要某個函數中的這個補丁,而不是'a.py'呢? – Jonathan