我正在使用Neo4j图形数据库,并希望适应当前的REST库之一。想象一下具有20个节点的数据库的情况。
>>> db = Database("http://localhost:7474")
我希望API尽可能简单,这样就可以得到类似于此的第14个节点:
>>> db[14]
在Neo4j中,每个节点都有一个数字键。这意味着db[14]
非常好地映射到http://localhost:7474/db/data/node/14
但是,我不想将数据库中的每个节点都加载到db
对象中。我首选的行为是查找节点14,如果数据库中不存在该值,则引发IndexError。也就是说,我希望db
对象为空,但假装有一个值。
是否可以制作看似list
的东西,但行为有很大差异?
答案 0 :(得分:10)
是的,您可以编写一个实现__getitem__
的自定义类并动态生成结果。
>>> 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
有关详细信息,请参阅Special method names。