2

私は dict をサブクラス化していますが、setitemで 1 つの割り当てが機能するのに別の割り当てが機能しないという問題に遭遇しました。私はそれを次の基本的な問題に煮詰めました:

class CustomDict(dict):
 def __setitem__(self, key, value):
  super(CustomDict, self).__setitem__(key, value)

テスト 1 は失敗します。

data = {"message":"foo"}
CustomDict(data)["message"] = "bar"
print CustomDict(data) # Expected "{'message': 'bar'}". Actual is "{'message': 'foo'}".
print data # Expected "{'message': 'bar'}". Actual is "{'message': 'foo'}".

テスト 2 は成功します。

data = CustomDict({"message":"foo"})
data["message"] = "bar"
print CustomDict(data) # Expected "{'message': 'bar'}". Actual matches expected.
print data # Expected "{'message': 'bar'}". Actual matches expected.

私はオンラインで調べましたが、サブクラスのコンストラクターが辞書をコピーするかどうかを判断できなかったため、操作は辞書の別のインスタンスで実行されます。何かアドバイス?

4

1 に答える 1

10

各行で CustomDict の新しいインスタンスを作成しています。 CustomDict(data)をコピーする新しいインスタンスを作成しdataます。

これを試して:

cd = CustomData({"message":"foo"})
cd["message"] = "bar"
print cd # prints "{'message': 'bar'}".
于 2009-10-31T19:51:29.183 に答える