我正在子类化 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.
我上网查了一下,但无法判断子类构造函数是否复制了字典,因此操作是在字典的不同实例上执行的。有什么建议吗?
最佳答案
您正在为每一行构建 CustomDict 的新实例。 CustomDict(data)
创建一个新实例,它复制 data
。
试试这个:
cd = CustomData({"message":"foo"})
cd["message"] = "bar"
print cd # prints "{'message': 'bar'}".
关于python - 子类化 python 的字典,重写 __setitem__ 不保留新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1655422/