是否有可能创建一个Python列表并假装填充它?

时间:2011-01-15 08:56:18

标签: python neo4j

我正在使用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的东西,但行为有很大差异?

1 个答案:

答案 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