Est-il possible de créer une liste Python et faux peuplant?
Question
Je travaille avec la base de données graphique Neo4j, et je voudrais adapter l'une des bibliothèques REST actuelles. Imaginez un cas avec une base de données avec 20 noeuds.
>>> db = Database("http://localhost:7474")
Je voudrais l'API pour être aussi simple que possible, de sorte qu'il serait possible d'obtenir le 14 nœud avec quelque chose de similaire à ceci:
>>> db[14]
Dans Neo4j, chaque nœud a une touche numérique. Cela signifie que db[14]
cartes très bien à http://localhost:7474/db/data/node/14
Cependant, je ne veux pas charger chaque nœud de la base de données dans l'objet db
. Mon comportement préféré consiste à rechercher le noeud 14 et soulever une IndexError si la valeur n'existe pas dans la base de données. Autrement dit, je veux l'objet db
vide mais faire semblant d'avoir une valeur.
Est-il possible à quelque chose d'artisanat qui ressemble à un list
, mais se comporte différemment de manière significative?
La solution
Oui, vous pouvez écrire une classe personnalisée qui implémente __getitem__
et génère un résultat dynamique.
>>> class MyDatabase(object):
... def __getitem__(self, x):
... if 10 <= x <= 15:
... return "foo"
... else:
... raise IndexError('key not in database')
...
>>> db = MyDatabase()
>>> db[12]
foo
Voir noms de méthodes spéciales pour plus d'informations.