DIR (X)의 모든 이름이 속성 액세스에 유효하지 않은 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/485095

문제

코더가 왜 물건을 넣을까요? __dict__ 속성 액세스에 사용할 수 없습니까? 예를 들어, 내 Plone 사례에서 dir(portal) 포함 index_html, 하지만 portal.index_html AttributeError를 올립니다. 이것은 또한 사실입니다 __class__ 속성 Products.ZCatalog.Catalog.mybrains. 이유가 있습니까? dir() 신뢰할 수 없습니까?

주위를 찌르기 inspect 모듈, 나는 그들이 사용하는 것을 본다 object.__dict__['x'] 이러한 이유로 속성 액세스 대신에 트리거를 원하지 않기 때문입니다. getattr 마법.

도움이 되었습니까?

해결책

나는 Plone에 대해 모르기 때문에 다음은 일반적입니다.

에서 문서dir:

객체에 이름이 지정된 메소드가있는 경우 __dir__(),이 방법은 호출되며 속성 목록을 반환해야합니다. 이를 통해 사용자 정의를 구현하는 객체를 허용합니다 __getattr__() 또는 __getattribute__() 방식을 사용자 정의하는 기능 dir() 그들의 속성을보고합니다.

여기서 추측하지만, 일어나고있는 두 가지를 생각할 수 있습니다.

  • 객체에는 a가 있습니다 __dir__() 없는 속성을 반환하는 메소드

  • (가능성이 적음) 대상 가지다 당신이 요구하는 속성 (예 : obj.__dict__ 또는 type(obj).__dict__, 그러나 무시합니다 __getattr__ 돌려 주다 AttributeError

편집하다: __dir__ Python 2.6+에서만 지원되지만 (더 이상) 특수 속성 __methods__ 그리고 __members__ 이전 버전에 대신 사용할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top