我無法用另一個函數從另一個模塊中替換一個函數,這讓我發瘋。一隻猴子在python中如何修補一個函數?
比方說,我有一個模塊bar.py,看起來像這樣:
from a_package.baz import do_something_expensive
def a_function():
print do_something_expensive()
而且我還有一個模塊,看起來像這樣:
from bar import a_function
a_function()
from a_package.baz import do_something_expensive
do_something_expensive = lambda: 'Something really cheap.'
a_function()
import a_package.baz
a_package.baz.do_something_expensive = lambda: 'Something really cheap.'
a_function()
我希望得到的結果:
Something expensive!
Something really cheap.
Something really cheap.
而是我得到這個:
Something expensive!
Something expensive!
Something expensive!
我在做什麼錯?
第二個不能工作,因爲你只是重新定義do_something_expensive的意義在你的本地範圍內。但我不知道,爲什麼第三個不工作...... – pajton 2010-03-03 22:18:22
正如尼古拉斯解釋的那樣,您正在複製一個參考文獻並只替換其中的一個參考文獻。 '從模塊導入non_module_member'和模塊級別的猴子打補丁是不兼容的,因爲這個原因,通常都是最好的避免。 – bobince 2010-03-03 22:29:35
首選的軟件包命名方案是小寫的,沒有下劃線,即'apackage'。 – 2010-03-03 22:39:00