![](/img/trans.png)
[英]How to mock an object's function which writes to the same object in python?
[英]Python: what's a function call on a mock object?
我不小心偶然发现了这种符号:
>>> m = mock.Mock()
>>> m().my_value = 5
>>>
>>> m
<Mock id='139823798337360'>
>>> m()
<Mock name='mock()' id='139823798364240'>
m
是模拟类型的 object, ()
是 function 调用。 function 如何调用 object?
我尝试调用普通的 object,但预计我遇到了异常
>>> class C(object):
... pass
...
>>> c = C()
>>> c()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'C' object is not callable
所以这一定是某种模拟魔法。 它是什么,它是用来做什么的?
在 Python 中,任何 object 都是可调用的,如果它实现了__call__
方法。
任何 function 都可以调用,因为 function object 实现了__call__
。 此外,所有类都是可调用的。 所以你可以创建一个 class 的实例
在您的 class 中,如果您添加__call__
它会如下所示
class C(object):
def __call__(self, *args):
print("instance is called with %s", tuple(args))
Mock
class 定义__call__
以便您可以跟踪模拟 object 的调用。
>>> m = Mock()
>>> m(3, 4)
<Mock name='mock()' id='140219558391696'>
>>> m.mock_calls
[call(3, 4)]
>>>
我会回答这个问题,因为我的问题似乎不太清楚。 所以符号:
m = mock.Mock()
m().my_value = 5
用于模拟工厂函数。 当您需要模拟返回具有某些属性的 object 的 function 时。 每次调用m()
都会返回模拟 object ,它与m
本身不同,但每次都相同(通常每次调用工厂 function 都会返回一个新对象)。 因此,当设置此 object 的属性时(如m().my_value=5
),它将在以后对m()
的任何调用中可用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.