python - 子类化 python 的字典,重写 __setitem__ 不保留新值

标签 python subclass dictionary

我正在子类化 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/

相关文章:

python - 如何检查变量是否是Python中的字典?

python - 使用代码将任何 2D 图像变成可 3D 打印的雕塑

python - 填充时间序列中缺失的天数(使用重复的键)

Java - 对于给定函数 foo(X i);在接口(interface)X中,为什么不能实现类Y将其更改为foo(Y i)?

javascript - es6扩展已经定义的类

java - 在 Java 中访问 protected 构造函数

python - 只允许 1 个 python 脚本实例

python - 数独消除策略

python - 在 python 中使用动态路径访问字典值

c# - Dictionary.Values.ToArray() 的顺序是什么?