我是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.
我在线查看但无法判断子类构造函数是否复制字典,因此操作是在字典的不同实例上执行的。有什么建议吗?
答案 0 :(得分:10)
您正在每行构建CustomDict的新实例。 CustomDict(data)
创建一个新实例,复制data
。
试试这个:
cd = CustomData({"message":"foo"})
cd["message"] = "bar"
print cd # prints "{'message': 'bar'}".