1
我有個模塊即碎內部的功能猴修補根據另一功能模塊內的模塊功能
broken.py
def brokenfunc():
dependency()
def dependency():
print "hello"
例程依賴於另一個功能依賴性,這是細。我需要修補猴子打破,所以在另一個模塊中我做了
patched.py
import broken
def brokenfunc():
print "patched"
dependency()
brokenfunc.__globals__["dependency"]=broken.brokenfunc.__globals__["dependency"]
broken.brokenfunc = brokenfunc
broken.brokenfunc()
很顯然,我必須覆蓋全局,因爲在打補丁函數依賴修補模塊中的定義,並會在那裏尋找依賴。
這個工程,但我不滿意的黑客。我試圖更新整個全局字典,但在這種情況下,我重寫了太多,並且破壞的函數繼續運行。這是否是正確的方式(考慮角落案例)還是有另一種正確的策略?
是的。今天,我贏得了「如何讓我的生活更加複雜」獎 –
,除了'__globals__'的重寫原因是嘲笑。有沒有我應該知道的角落案例? (免責聲明:我試過'mock'和'minimock',但是他們沒有按照我的意願工作,所以我用手工來代替)。 [數據模型](https://docs.python.org/2/reference/datamodel.html)具有*屬性*(引用本身)是隻讀的。 – n611x007
爲什麼堅持要訪問'__globals__'?有更多可讀的方法來訪問模塊名稱空間,即使是動態的。相反,用'mock'努力嘗試。 –