我有一个名为Foo的类,其中包含一个名为isValid的方法。然后我有一个名为bar()的方法,它接收一个Foo对象,并且其行为取决于该对象是否有效。
为了测试这个功能,我想传递一个对象到bar()方法中,使其isValid方法始终返回False。由于某些原因,在测试时我不能创建一个Foo对象,因此我需要一个虚拟对象来代替它。我最初想到的是创建一个最通用的对象并向其中添加isValid属性,以便将其用作Foo。但那并不完全行得通:
为了测试这个功能,我想传递一个对象到bar()方法中,使其isValid方法始终返回False。由于某些原因,在测试时我不能创建一个Foo对象,因此我需要一个虚拟对象来代替它。我最初想到的是创建一个最通用的对象并向其中添加isValid属性,以便将其用作Foo。但那并不完全行得通:
>>> foo = object()
>>> foo.isValid = lambda : False
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'object' object has no attribute 'isValid'
我发现对象没有__dict__
,因此您不能向其添加属性。此时,我使用的解决方法是临时创建一个类型,然后创建该类型的对象:
>>> tmptype = type('tmptype', (), {'isValid' : lambda self : False})
>>> x = tmptype()
>>> x.isValid()
False
但这似乎太过牵强。一定有一些常见的类型可供我用于此目的,但是哪种类型呢?
type
命令可能有一个打字错误,因为我得到了 "SyntaxError: invalid syntax" 的语法错误;似乎需要另一个逗号,所以tmptype = type('tmptype', (object,), {})
对我来说可以正常工作。 - sdaau