2014-02-18 2 views
2

상속을 존중하면서 클래스에서 정적 변수 목록을 가져올 수 있는지 궁금합니다.상속을 존중하면서 정적 변수 목록 가져 오기 (키 - 값 사전)

나는 클래스 내의 모든 정적 변수의 키와 값의 사전을 반환하는 코드가 있습니다

dict = {attr: Class.__dict__[attr] for attr in Class.__dict__ if not callable(getattr(Class, attr)) and not attr.startswith('__')}

문제는 단지 특정 클래스 내에서 선언 된 정적 변수를 반환하는 것입니다,하지만 부모 클래스에서 상속받은 클래스가 아닙니다.

class Class(): 
    var1 = 1 

    def __init__(self): 
    pass 

class SubClass(Class): 
    var2 = 2 

    def __init__(self): 
    super().__init__() 

if __name__ == '__main__': 
    dict1 = {attr: Class.__dict__[attr] for attr in Class.__dict__ if not callable(getattr(Class, attr)) and not attr.startswith('__')} 
    dict2 = {attr: SubClass.__dict__[attr] for attr in SubClass.__dict__ if not callable(getattr(SubClass, attr)) and not attr.startswith('__')} 

    print(dict1) 
    print(dict2) 

    print('Class: var1 = {}'.format(Class.var1)) 
    print('SubClass: var1 = {}, var2 = {}'.format(SubClass.var1, SubClass.var2)) 

반환

{'var1': 1} 
{'var2': 2} 
Class: var1 = 1 
SubClass: var1 = 1, var2 = 2 

내가 기본 클래스에 대한 사전을 얻고 서브 클래스의 사전과을 연결의 생각,하지만 난 상속 I의 얼마나 많은 수준을 특정하지 않다 : 예를 들어, 오히려 불필요한 두통을 피할 것입니다.

내가 제안한 것 이외에 상속 된 것을 포함하여 클래스 내의 모든 정적 변수의 키 - 값 사전을 가져 오는 방법이 있습니까?

# Python 2.7.6 
class A(object): 
    a_static_var = 'A static var' 

class B(A): 
    b_static_var = 'B static var' 

print dir(B) 

인쇄 :

['__class__', 
...<etc>..., 
'a_static_var', 
'b_static_var'] 

정적 변수와 값의 사전을 얻으려면 당신이 정말로 정적 변수에 대해 신경 경우

답변

2

는 아마도 dir 내장 함수는 적절한 것 (누군가가 startswith('_')을 사용하는 대신 값을 필터링하는 더 나은 방법을 추천 할 수 있습니다.)

+0

빠른 답장을 보내 주셔서 감사합니다. 'dir()'은 상속 된 정적 변수도 반환하지만 값은 반환하지 않습니다. 키 - 값 사전을 반환하는 솔루션에 관심이 있습니다. – sudosensei

+0

@sudosensei - 내 추가 참조 – mdscruggs

+0

좋은 하나! 거의 완벽하게 작동합니다. 함수가 무시되고 응답이 완료되도록'(와) 호출 할 수없는 (getattr (B, attr))'을 추가 할 것을 제안 할 수 있습니까? 다시 한번 감사합니다. ':-)' – sudosensei