Pergunta

Eu tenho uma classe em um módulo I que lê um arquivo plist (XML) e retorna um dicionário. Isto é extremamente conveniente, porque eu posso dizer algo como:

Data.ServerNow.Property().DefaultChart

Este retorna um dicionário propriedade, especificamente o valor para DefaultChart. Muito elegante. No entanto, a montagem de um dicionário desta forma falhar:

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

dict parece exatamente com o dict Plist. Mas quando digo

print TextNow.Data().Name

Eu recebo erro

 'dict' object has no attribute 'Name'

Mas se eu disser

print TextNow.Data()['Name']

De repente ele funciona!

Alguém pode explicar esse comportamento? Existe uma maneira de converter um dicionário para um dict XML-ish?

Foi útil?

Solução

Você pode usar redefinição getattr para tratar chaves de dicionário como atributos, p.ex.:.

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

Assim, por exemplo, se você possui as seguintes dict:

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

Você pode fazê-lo:

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

Outras dicas

Ele não funciona porque o operador ponto não é sintaxe acessor apropriado para dicionários Python. Você; re tentando tratá-lo como um objeto e acessar uma propriedade, em vez de acessar um membro de dados da estrutura de dados

.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top