문제

모듈 I에 plist (xml) 파일을 읽고 dict를 반환하는 클래스가 있습니다. 이것은 다음과 같은 말을 할 수 있기 때문에 매우 편리합니다.

Data.ServerNow.Property().DefaultChart

이것은 속성 사전, 특히 값을 반환합니다. DefaultChart. 매우 우아합니다. 그러나 이런 식으로 사전을 조립하는 것은 실패합니다.

dict={'Data': 'text1', 'Name':'text2', 'Place':'text3]}

dict 명백한 독점과 똑같이 보입니다. 하지만 내가 말할 때

print TextNow.Data().Name

오류가 발생합니다

 'dict' object has no attribute 'Name'

하지만 내가 말하면

print TextNow.Data()['Name']

갑자기 작동합니다!

누군가이 행동을 설명 할 수 있습니까? DICT를 XML-ish DICT로 변환하는 방법이 있습니까?

도움이 되었습니까?

해결책

getAttr 재정의를 사용하여 사전 키를 속성으로 취급 할 수 있습니다.

class xmldict(dict):
    def __getattr__(self, attr):
        try:
            return object.__getattribute__(self, attr)
        except AttributeError:
            if attr in self:
                return self[attr]
            else:
                raise

예를 들어, DICT를 다음과 같은 경우 :

dict_ = {'a':'some text'}

당신은 그렇게 할 수 있습니다 :

>> print xmldict(dict_).a
some text
>> print xmldict(dict_).NonExistent
Traceback (most recent call last):
  ...
AttributeError: 'xmldict' object has no attribute 'NonExistent'

다른 팁

DOT 연산자가 Python 사전에 대한 적절한 액세서 구문이 아니기 때문에 작동하지 않습니다. 데이터 구조의 데이터 구성원에 액세스하기보다는 객체로 취급하고 속성에 액세스하려고합니다.

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