2017-06-02 40 views
1

假設我正在導入一個庫,該庫對於我正在編寫的程序具有一些核心功能。它看起來像:導入後修改庫函數

class dothing(object): 
    def __init__(self): 
     # stuff 

    def main(self): 
     self.thing = [] 
     self.option = [] 

我怎樣才能修改其變量的內容,而不觸及庫本身 - 換句話說,從我的本地代碼。或者,我如何修改「主」功能?

我聽說過「猴子補丁」,但我不知道這是正確的事情

+0

提供一個更完整的示例來顯示您打算的行爲。在這一點上,目前還不清楚你的*特定問題。 –

+0

是否繼承你的「dothing」類,並重寫「main」方法,回答你所需要的? – ma3oun

+0

@ ma3oun正確 – popopret

回答

0

如果你想改變main函數,你確實可以使用猴子補丁。如果你想改變整個類別的行爲,這是首選的策略。

class dothing(object): 
    def __init__(self): 
     # stuff 

    def main(self): 
     self.thing = [] 
     self.option = [] 

def my_new_main(self): 
    print("Hello") 
    self.thing = {} 
    self.option = ["Foo"] 

donothing.main = my_new_main 

dn = donothing() 
dn.main() 
# Hello 
dn.thing 
# {} 
dn.option 
# ["Foo"] 

您也可以使用此策略將新方法附加到donothing

donothing.bar = lambda self, x: x + 3 
dn.bar(1) 
# 4 
0

定義另一個類,從原始的類繼承,並覆蓋「主」的方法如下:

class doOtherThing(dothing): 
    def main(self): 
    self.thing = [1] # this is just a value different from [] in the original "main"