2

我正在对 dict 进行子类化,但是遇到了setitem的问题,其中一个作业有效,而另一个作业无效。我把它归结为以下基本问题:

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 回答