gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 22:17:07 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com