python - 我可以添加属性的最通用的 python 类型是什么?

标签 python object attributes types

我有一个带有方法 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/

相关文章:

c# - 使用方法名称的属性

python - WSGIRequest 对象没有属性 get

python - 麻麻。如何打开文件

python - 将外部套接字描述符与扭曲 react 器集成

c# - 保护客户的 VS2015 解决方案

c++ - 如何禁止在 C++ 中使用默认构造函数?

具有构造函数属性的 gcc 函数没有被链接

python - Windows 下 Python 的文件名格式化

javascript - 如何为对象当前值添加值

Angular2 使用指令在标签中插入自定义属性