2011-07-03 1 views
0

클래스를 정의하고 해당 클래스의 인스턴스를 여러 개 인스턴스화하는 Python 모듈이 있습니다. 올바른 숫자가 인스턴스화되었다는 테스트를 작성하고 싶습니다. dir(foo)은 문자열의 목록을 제공하는 것 때문에 작동하지 않습니다파이썬 2.7에서 인트로 스펙을 사용하여 모듈에서 특정 클래스의 인스턴스를 찾는 방법은 무엇입니까?

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

: 같은

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

그런 다음 테스트에 내가 시도 일.

모듈에서 특정 클래스의 인스턴스를 찾는 방법이 있습니까?

답변

2

정말 가깝습니다. 비교를 위해 서명 이중 등호를 사용하여, 당신은 이름으로 모듈 멤버를 검색 할 수 getattr()를 사용해야합니다

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

또한 documentationdir()에 읽을 것이 도움이 될 수 있습니다.