Можно ли создать список Python и подделать его? - PullRequest
3 голосов
/ 15 января 2011

Я работаю с графической базой данных 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 Ответ

10 голосов
/ 15 января 2011

Да, вы можете написать собственный класс, который реализует __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

См. Имена специальных методов для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...