Ok donc j'ai construit mon propre gestionnaire variable qui a une fonction __getitem__
à utiliser lors de l'accès aux données via des données [clés], il fonctionne très bien, sauf lorsque vous essayez d'accéder à un lien d'objets:Python - Dictionnaire - Modifier __getitem__?
data["key"]["subkey"]
def __getitem__(self, key, **args):
print key
...
return self.dict[key]
Lorsque En essayant d'accéder à une sous-clé qui n'existe pas, Python retourne simplement une KeyError sans imprimer "subkey", pourquoi est-ce et comment puis-je obtenir Python pour imprimer ce que j'essaie réellement d'obtenir?
Je sais que j'ai probablement mal compris la mécanique mais existe-t-il un moyen d'émuler un dictionnaire ET de suivre la chaîne de données demandée? Principalement si je peux dynamiquement enregistrer les variables manquantes dans un flux dictionnaire ...
Cela fonctionne évidemment (mais ce n'est pas la syntaxe native que je l'aime):
data["key:subkey"]
def __getitem__(self, key, **args):
for slice in key.split(':'):
print key
...
Le but est d'imiter les éléments suivants ,
Travaux:
data = {'key' : {'subkey' : 1}}
print data["key"]["subkey"]
ne fonctionnera pas, mais je veux attirer l'exception dans __getitem__
puis créez la mi touche ssing automatiquement ou connectez-la sous-clé manquante:
data = {'key' : {}}
print data["key"]["subkey"]
Solution:
class Var():
def __init__(self):
self.dict = {'test' : {}}
def __getitem__(self, var, **args):
print ':',var
if var in self.dict:
v = Var(self.dict[var])
return v
print vHandle['test']['down']
Sortie:
: Test
: vers le bas
Aucun
Ai-je raté quelque chose ici, ou cela ne méritait-il pas un downvote du tout? Le downvoter pourrait-il s'expliquer? – Polynomial
Quel est le type de 'data'? Quel est le type de 'data [" key "]'? Vous avez probablement besoin de montrer plus de code - sinon tout ce que nous pouvons faire est de deviner. (Non mon downvote) –
Non, vous ne pouvez pas le faire directement (vous pouvez en retournant un objet enveloppé en faisant les mêmes signes). Pensez-y de cette façon: '_ = data ['key']' suivi de '_ ['subkey']'. Vous pourriez aussi avoir 'data ['key', 'subkey']' (touches de tuple) si c'était un moyen valide d'accéder aux données. –