ric*_*cab 6 python attributes types object
我有一个类Foo,方法是isValid.然后我有一个方法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'
Run Code Online (Sandbox Code Playgroud)
我发现对象没有__dict__
,所以你不能为它添加属性.此时,我正在使用的解决方法是为此目的动态创建一个类型,然后创建该类型的对象:
>>> tmptype = type('tmptype', (), {'isValid' : lambda self : False})
>>> x = tmptype()
>>> x.isValid()
False
Run Code Online (Sandbox Code Playgroud)
但这似乎太长了一枪.必须有一些随时可用的通用类型,我可以用于此目的,但哪个?
你有正确的想法,但你可以使它更一般.或
tmptype = type('tmptype', (object,) {})
Run Code Online (Sandbox Code Playgroud)
要么
class tmptype(object):
pass
Run Code Online (Sandbox Code Playgroud)
然后就可以了
foo = tmptype()
foo.is_valid = lambda: False
Run Code Online (Sandbox Code Playgroud)
就像你想做的那样object
.这样,您可以使用相同的类来满足所有动态,单一修补需求.
只是为了陈述正确的答案,并且人们不必阅读所有评论:没有这种类型。它已经被提出、讨论,但这个想法已被拒绝。以下是 aaronasterling 在评论中发布的链接,可以阅读更多内容:http://mail.python.org/pipermail/python-bugs-list/2007-January/036866.html
归档时间: |
|
查看次数: |
769 次 |
最近记录: |