我有一个带有方法 isValid 的类 Foo。然后我有一个方法 bar() 接收一个 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
但这似乎太遥远了。必须有一些现成的通用类型可以用于此目的,但是哪个?
最佳答案
你有正确的想法,但你可以使它更通用。要么
tmptype = type('tmptype', (object,) {})
或
class tmptype(object):
pass
那你就可以了
foo = tmptype()
foo.is_valid = lambda: False
就像您想对 object
做的那样。这样,您就可以使用同一个类来满足所有动态的 monky-patching 需求。
关于python - 我可以添加属性的最通用的 python 类型是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3933904/