2011-01-15 3 views
3

私はNeo4jグラフデータベースを使用しており、現在のRESTライブラリの1つを採用したいと考えています。 20ノードのデータベースを想定します。Pythonリストを作成してそれを偽装することは可能ですか?

>>> db = Database("http://localhost:7474") 
私はこれに似たもので、14ノードを取得することが可能であるように、APIは、可能な限りシンプルにしたいと思います

:のNeo4jで

>>> db[14] 

は、すべてのノードが持ちます数字キー。つまり、db[14]http://localhost:7474/db/data/node/14に非常にうまくマップされますが、データベースからすべてのノードをdbオブジェクトにロードしたくありません。私の好みの動作は、ノード14を検索し、その値がデータベースに存在しない場合にIndexErrorを発生させることです。つまり、私はdbオブジェクトを空にしたいが、値を持つふりをしたい。

listのように見えるが、動作が大きく異なる可能性はありますか?

+0

"私の好みの動作は、ノード14をルックアップし、その値がデータベースに存在しない場合はIndexErrorを発生させることです。つまり、dbオブジェクトを空にしたいが、値を持つふりをする。 ---それはどのように価値を持つことをふりまえていますか?あなたはindexErrorを発生させますので、vauleをまねするようなことはしません。 –

+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を参照してください。

+0

ありがとうございましたマーク - 私はダブルアンダースコアメソッドの1つを上書きすることに関与していると仮定しました。 –

+0

私はビルドされたpython型が文書化された "インタフェース"を実装していると付け加えます。 '__something__'という名前の関数を使ってほとんどすべての組み込み型を偽造することができます。 –

+0

@アドリアン:私はここで "偽"は適切な言葉ではないと思う。他のタイプを作成した場合、それと同じように良い、それは "偽"ではありません。 – jsbueno

関連する問題