Python 如何修补基类方法?

Python 如何修补基类方法?,python,python-mock,Python,Python Mock,我有两门课: class A(object): def get_something(self): return 1 class B(A): pass 当我尝试在测试中修补A.get_时,它失败了 from some_module.myclasses import B ... def test_something(self): with patch('some_module.myclasses.A.get_something', return_valu

我有两门课:

class A(object):
    def get_something(self):
        return 1

class B(A):
    pass
当我尝试在测试中修补A.get_时,它失败了

from some_module.myclasses import B

...
def test_something(self):
    with patch('some_module.myclasses.A.get_something', return_value=2):
        self.assertEqual(B().get_something(), 2)

这里怎么了?

发现了。我必须修补导入的
A

from some_module.myclasses import A, B

...
def test_something(self):
    with patch.object(A, 'get_something', return_value=2):
        self.assertEqual(B().get_something(), 2)

您所做的是正确的,但如果不起作用,则可能是因为其他模块将
A
B
导入其命名空间,并且没有使用与您修补的包相同的包

当你做这样的事情时,我看到了这种情况:

mypackage/
    __init__.py
    mod.py
Python模块

mypackage/mod.py

class A(object):
    def get_something(self):
        return 1
from mod import *
mypackage/\uuuuu init\uuuuuu.py

class A(object):
    def get_something(self):
        return 1
from mod import *

然后,
mypackage.mod.A
可以作为
mypackage.A
导入,但是您的补丁
mypackage.mod.A

不,我不是在
\uu init\uuuuuuuuuuuupy
中导入它。但是谢谢你的建议