상속을 존중하면서 클래스에서 정적 변수 목록을 가져올 수 있는지 궁금합니다.상속을 존중하면서 정적 변수 목록 가져 오기 (키 - 값 사전)
나는 클래스 내의 모든 정적 변수의 키와 값의 사전을 반환하는 코드가 있습니다
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']
정적 변수와 값의 사전을 얻으려면 당신이 정말로 정적 변수에 대해 신경 경우
빠른 답장을 보내 주셔서 감사합니다. 'dir()'은 상속 된 정적 변수도 반환하지만 값은 반환하지 않습니다. 키 - 값 사전을 반환하는 솔루션에 관심이 있습니다. – sudosensei
@sudosensei - 내 추가 참조 – mdscruggs
좋은 하나! 거의 완벽하게 작동합니다. 함수가 무시되고 응답이 완료되도록'(와) 호출 할 수없는 (getattr (B, attr))'을 추가 할 것을 제안 할 수 있습니까? 다시 한번 감사합니다. ':-)' – sudosensei