2017-07-17 68 views
0

我有一個類的實例。嘲笑一個已經實例化的python類的函數

MyClass.py:

class MyClass: 
    def f1(self): 
     print 'f1' 
     self.f2() 

    def f2(self): 
     print 'f2' 

myInstance = MyClass() 

如果我打電話myInstance.f1()我得到:

f1 
f2 

在我的測試類,我想改變的f2()行爲,而不產生的myInstance一個新實例,或觸摸f1()。所以,我想設置在我的測試類f2(),以至於當我運行:

TestMyClass.py:

from MyClass import myInstance 

# I don't know what goes here... 
def f2(self): 
    print 'mock_f2' 

myInstance.f1() 

它打印:

f1 
mock_f2 

我該怎麼辦呢?我在網上看到的所有說明都要求我創建一個MyClass的新實例併爲此做些事情。

回答

0

在Python中,你可以設置一個像屬性的方法。

def f2(): 
    print "mock f2" 
class A(object): 
    def f1(self): 
     print "f1" 
     self.f2() 

    def f2(self): 
     print "f2" 
a = A() 
# prints 
# f1 
# f2 
a.f1() 
a.f2 = f2 
# prints 
# f1 
# mock f2 
a.f1() 

這樣做會將方法設置在對象級別,這意味着如果您實例化另一個對象,它將不會受到影響。

b = A() 
# prints 
# f1 
# f2  
b.f1()