2013-10-09 19 views
1

我有一個腳本,導入一個模塊,有一個功能,我想稍微改變。可以說,該模塊具有的功能劃分和run_program:如何處理從安裝的模塊稍微改變方法?

def _divide(var): 
    return 1/var 

run_program(x): 
    do some stuff 
    _divide(x) 
    do more stuff 

相反,我想它做

def divide(var): 
    if var == 0: 
     var = 1e-131 
    return 1/var 

    run_program(x): 
     do some stuff 
     _divide(x) 
     do more stuff 

我現在已經在模塊中改變的功能。但是,如果我想在其他地方運行程序,那麼我也需要在那裏更改模塊。 因爲我想改變的函數是從模塊內調用的,所以我不能覆蓋它(據我所知)。我可以更改我的腳本中的功能,以便我不必更改已安裝的模塊?


編輯:該模塊https://pypi.python.org/pypi/dirichlet/0.7的功能是:

def _init_a(D): 
'''Initial guess for Dirichlet alpha parameters given data D''' 
    E = D.mean(axis=0) 
    E2 = (D**2).mean(axis=0) 
    return ((E[0] - E2[0])/(E2[0]-E[0]**2)) * E 

回答

3

您可以在Python動態替換功能:

import module 

old_divide = module._divide 

def new_divide(var): 
    if var == 0: 
     var = 1e-131 
    return old_divide(var) 

module._divide = new_divide 

run_program,然後調用它會使用替換功能; _divide的查找是在調用run_program時完成的,而不是在模塊加載時完成的。

+0

請您詳細說明一下嗎? – Vivek

+0

@Vivek:詳細闡述一下? –

+0

我的意思是,它的實際用法,以及這是如何由python內部處理的。 – Vivek