2011-09-28 4 views
7

동적으로 가져온 하위 패키지의 모듈이 있습니다. 어떻게 포함 된 클래스를 반복 할 수 있습니까?동적으로 가져온 모듈에 정의 된 클래스를 반복하십시오.

나는 모듈을 가져 와서이 같은 이름이 나열되었습니다

package = current_module.__name__ 
package = package[:package.rindex(".")] # get the package 
package = "%s.sub.%s"%(package,name) # make the name of the child 
print "(loading package %s)"%package 
module = __import__(package) # this succeeds 
for name,obj in inspect.getmembers(module): 
    print name,type(obj) 

이 유일한 인쇄 모듈의 속성이 아닌 모듈을 정의하는 클래스 유형 :

__builtins__ <type 'dict'> 
__doc__ <type 'NoneType'> 
__file__ <type 'str'> 
__name__ <type 'str'> 
__package__ <type 'NoneType'> 
__path__ <type 'list'> 
imported_package <type 'module'> 

UPDATE를

내 수업은에없는 것 같습니다.fromlist이 비어 있지 않으면! from-list의 값은 유효성이 검증 된 것 같지 않습니다. [""] 잘 작동하는 것, 그리고 갑자기 클래스가 나타납니다!

이유가 누구인지 설명 할 수 있습니까? 클래스 이름을 매핑하는 딕셔너리를 만들 :

(표준 우분투 파이썬 2.7.1+ (R271 : 86,832)

답변

17

개조 예는로드 모듈

이다

dict([(name, cls) for name, cls in mod.__dict__.items() if isinstance(cls, type)]) 

+0

가져 오기에 fromlist 절이 없으면 작동하지 않습니다. 질문이 업데이트되었습니다 . – Will

+0

오, 사소한 점은 try 블록에서 issubclass를 바꾸는 것입니까? – Will

+0

(처음) 당신은 fromlist에 대해 옳았습니다. 저는 보통 [ 그 이유는 무엇인지 모르겠다. (둘째) 아니. , 나는'isinstance'를 의미 했지'issubclass'가 아니라'try'가 없었다. 각 클래스는 'type'유형의 객체이기도합니다. – pvoosten

관련 문제