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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top