Acessando itens Plist em um dicionário
-
07-07-2019 - |
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?
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
.