私はdictのカスタム実装を持っています。これは、ネイティブのPython dictによってオーバーライドされています。しかし、設定すると、値にいくらかの前処理が行われ、独自のオブジェクトに格納されます。取得すると、この独自オブジェクトはより自然な形式に変換されます。Python Dict更新からカスタムDict
このカスタム辞書から呼び出されたときのすべての機能は、好きなように動作します。
{'a':1} .update(custom_dict({'b':2}))のようなものを呼び出すと、更新されたdictの 'b'の値が独自の内部記憶域オブジェクトであり、処理された値ではありません。
Pythonのネイティブdict更新はどのように機能しますか。 items
、iteritems
、values
、itervalues
、get
、および__getitem__
を使用して考えることができるすべてのメソッドをオーバーライドしましたが、更新プログラムにアクセスしようとしていないようですCコードを使用している可能性があります。思考?
--Update--
私は、Pythonのソースコードでこれを見つけた:
if (PyDict_Check(b)) {
...
}
else {
/* Do it the generic, slower way */
...
}
は、おそらくこれはバグであり、他の様々な場所に現れるように、そのはPyDict_CheckExact(b)
する必要がありますコード。
どのようにすればよいでしょうか?
'dict'から継承していますか?そうしないと助けになるかもしれません。とにかく 'dict'の機能の多くを再利用しないようです。 – 9000
はい、私はdictから継承します。基本的には、私がオーバーライドしたすべてのメソッドは、何らかの処理の後で明示的にdict .__メソッドを呼び出します。私はサポートディクテーションを持っていて、抽象基本クラスを使用することの選択肢が悪化すると考えました... –