我有一个班级的实例。
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 :(得分: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()