DIR (X)의 모든 이름이 속성 액세스에 유효하지 않은 이유는 무엇입니까?
-
20-08-2019 - |
문제
코더가 왜 물건을 넣을까요? __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__
이전 버전에 대신 사용할 수 있습니다.