2011-01-20 18 views
2

私はdictのカスタム実装を持っています。これは、ネイティブのPython dictによってオーバーライドされています。しかし、設定すると、値にいくらかの前処理が行われ、独自のオブジェクトに格納されます。取得すると、この独自オブジェクトはより自然な形式に変換されます。Python Dict更新からカスタムDict

このカスタム辞書から呼び出されたときのすべての機能は、好きなように動作します。

{'a':1} .update(custom_dict({'b':2}))のようなものを呼び出すと、更新されたdictの 'b'の値が独自の内部記憶域オブジェクトであり、処理された値ではありません。

Pythonのネイティブdict更新はどのように機能しますか。 itemsiteritemsvaluesitervaluesget、および__getitem__を使用して考えることができるすべてのメソッドをオーバーライドしましたが、更新プログラムにアクセスしようとしていないようですCコードを使用している可能性があります。思考?

--Update--

私は、Pythonのソースコードでこれを見つけた:

if (PyDict_Check(b)) { 
    ... 
} 
else { 
    /* Do it the generic, slower way */ 
    ... 
} 

は、おそらくこれはバグであり、他の様々な場所に現れるように、そのはPyDict_CheckExact(b)する必要がありますコード。

どのようにすればよいでしょうか?

+0

'dict'から継承していますか?そうしないと助けになるかもしれません。とにかく 'dict'の機能の多くを再利用しないようです。 – 9000

+0

はい、私はdictから継承します。基本的には、私がオーバーライドしたすべてのメソッドは、何らかの処理の後で明示的にdict .__メソッドを呼び出します。私はサポートディクテーションを持っていて、抽象基本クラスを使用することの選択肢が悪化すると考えました... –

答えて