3

我正在使用 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对象为空但假装有一个值。

是否可以制作看起来像 a list,但行为却大不相同的东西?

4

1 回答 1

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

有关详细信息,请参阅特殊方法名称

于 2011-01-15T08:57:59.967 回答