如何在Python 2.7中使用内省来查找模块中某些类的实例?

时间:2011-07-03 05:03:22

标签: python introspection

我有一个Python模块,它定义了一个类并实例化了该类的许多实例。我想写一个测试,证明正确的数字已被实例化。

bar = Foo('abc')
baz = Foo('def')
...
quz = Foo('xyz')

然后在测试中我尝试过这样的事情:

assert num = len([ x for x in dir(foo) if isinstance(x, foo.Foo)])    

不起作用,因为dir(foo)似乎给出了一个字符串列表。

有没有办法在模块中找到特定类的实例?

1 个答案:

答案 0 :(得分:2)

你真的很亲密。使用双等号进行比较,您需要使用getattr()按名称检索模块成员:

assert num == len([getattr(foo, x) 
                   for x in dir(foo) 
                   if isinstance(getattr(foo, x), foo.Foo)])

也可以阅读dir()上的documentation