2011-05-11 5 views
2

다음과 같은 Python 2.x module.py 파일이 있습니다.파이썬 : 단일 모듈 파일에서 전역 클래스 검색

class A(object): 
    KEYWORD = 'Class A' 

class B(A): 
    KEYWORD = 'Class B' 

class C(object): 
    pass 

def list_class_keywords(): 
    for name in globals(): 
     print name, hasattr(name, 'KEYWORD') 

if __name__ == '__main__': 
    list_class_keywords() 
list_class_keywords() list_class_keywords()에서이 파일 모듈의 모든 객체를 반복하고 객체에 KEYWORD 속성이 있는지 테스트합니다. name은 문자열이므로 분명히 작동하지 않습니다. list_classes을 어떻게 재 작성하여 내가 원하는 것을 얻을 수 있습니까?


업데이트 : 힌트 : Ignacio에게 감사드립니다. 다음은 업데이트 된 코드입니다.

def list_class_keywords(): 
    global_dict = globals() 
    for name in global_dict: 
     obj = global_dict[name] 
     print name, hasattr(obj, 'KEYWORD') 

답변

2
class A(object): 
    KEYWORD = 'Class A' 

class B(A): 
    KEYWORD = 'Class B' 

class C(object): 
    pass 

def list_class_keywords(): 
    for name, obj in globals().items(): 
     print name, hasattr(obj, 'KEYWORD') 

if __name__ == '__main__': 
    list_class_keywords()  
3

globals()은 사전입니다. 그것을 색인하십시오.

하지만 데코레이터를 사용하여 클래스를 열거해야합니다.

1

조금 해킹되었지만 eval() 문자열을 이름으로 사용할 수 있으며 그 이름을 가진 객체를 가져올 수 있습니다. 그런 일이 계급이라면 일해야합니다.

테스트 :

>>>> class Object: 
....  pass 
.... 
>>>> eval("Object") 
<class __main__.Object at 0x0000000102a62bc0> 
>>>> 

UPDATE : 다른 대답은 훨씬 낫다.