그래서 가장 구체적인 클래스에 대해서만 사전/속성 목록을 가져올 수 있습니까? 지금까지 내가 사용하고있다파이썬 클래스 속성이 슈퍼 클래스가 없음
for attr, value in obj.__class__.__dict__.iteritems():
그러나 이것도 나에게 슈퍼 클래스에 정의 된 attibutes를 줄 것이다. 이것을 피할 수있는 방법이 있습니까?
그래서 가장 구체적인 클래스에 대해서만 사전/속성 목록을 가져올 수 있습니까? 지금까지 내가 사용하고있다파이썬 클래스 속성이 슈퍼 클래스가 없음
for attr, value in obj.__class__.__dict__.iteritems():
그러나 이것도 나에게 슈퍼 클래스에 정의 된 attibutes를 줄 것이다. 이것을 피할 수있는 방법이 있습니까?
추출 클래스는 사전 객체에 의해 구현 된 네임 스페이스가있는 python documentation
에서. 클래스 속성 참조는이 사전에서 검색으로 변환됩니다. 예를 들어, Cx는 C .__ dict __ [ "x"]로 변환됩니다 (새 스타일 클래스의 경우 특히 의 다른 방법을 허용하는 여러 가지 후크가 있음). 속성 찾기). 속성 이름이 발견 가 아닌 경우, 속성 검색이 기본 클래스 즉
에 계속 __dict__ 클래스의 "로컬"속성을 포함, 슈퍼 클래스의 속성은 슈퍼 클래스 __dict__에 저장됩니다.
따라서 __class__.__dict__.iteritems()
을 사용하여 클래스 속성 만 검색 할 수 있습니다.
그것은 나에게 슈퍼 클래스의 속성을 표시하지 않습니다
>>> class A(object):
def a(self):
print a
b = 3
>>> a = A()
>>> dir(a)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'a', 'b']
>>> list(a.__class__.__dict__)
['a', '__module__', 'b', '__dict__', '__weakref__', '__doc__']
__module__
는 __dict__
는 __weakref__
는 __doc__
는 기본적으로 각 클래스 생성 속성 것으로 보인다. 기본 속성의
이 목록은 이전 스타일 클래스 다릅니다
>>> class B:
pass
>>> list(B().__class__.__dict__)
['__module__', '__doc__']
모든 클래스 속성과 상속 클래스를 포함한 그 값의 딕셔너리를 얻고 싶은 경우에, 당신은 다음 코드를 사용 할 수 있습니다 :
cls_dict = { attr: getattr(obj.__class__, attr)
for attr in dir(obj.__class__) }
for attr, val in cls_dict.iteritems():
logging.info("%s = %s", attr, val)
을