子类化python的dict,覆盖__setitem__不会保留新值

Sam*_*Wan 2 python dictionary subclass

我是dict的子类,但遇到了setitem的问题,其中一个赋值有效,但另一个赋值没有.我把它归结为以下基本问题:

class CustomDict(dict):
 def __setitem__(self, key, value):
  super(CustomDict, self).__setitem__(key, value)
Run Code Online (Sandbox Code Playgroud)

测试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'}".
Run Code Online (Sandbox Code Playgroud)

测试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.
Run Code Online (Sandbox Code Playgroud)

我在线查看但无法判断子类构造函数是否复制字典,因此操作是在字典的不同实例上执行的.有什么建议?

Ned*_*der 10

您正在每行构建CustomDict的新实例. CustomDict(data)制作一个新的实例,复制data.

试试这个:

cd = CustomData({"message":"foo"})
cd["message"] = "bar"
print cd # prints "{'message': 'bar'}".
Run Code Online (Sandbox Code Playgroud)