python - 锁定自定义词典

标签 python dictionary locking

Python 们好,

我想制作一个具有两个主要功能的自定义词典:

  1. 所有键都在创建时声明
  2. 无法添加新键或修改当前键(值仍然可以修改)

现在代码是这样的:

class pick(dict):
   """This will make delicious toffee when finished"""
   def __init__(self, *args):
       dict.__init__(self)
       for arg in args:
           self[arg] = None

非常感谢任何帮助。

更新:

虽然我一直在寻找解决方案,但有一个问题:

字典调用 __setitem__ 在初始化时添加项目,但找不到它引发错误的键。

cupboard = pick('milk')  #raises error

upd1:

都解决了,非常感谢。

最佳答案

用你想要的行为覆盖 __setitem__ 方法,调用 dict.__setitem__(self, key, value) 来修改基本字典而不通过你的基本逻辑。

class ImmutableDict(dict):
    def __setitem__(self, key, value):
        if key not in self:
             raise KeyError("Immutable dict")
        dict.__setitem__(self, key, value)

d = ImmutableDict(foo=1, bar=2)
d['foo'] = 3
print(d)
d['baz'] = 4 # Raises error

您还需要覆盖 dict.update()setdefault() 以避免添加键。可能还有 dict.__delitem__()dict.clear()dict.pop()dict.popitem() 以避免删除 key 。

关于python - 锁定自定义词典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1260649/

相关文章:

c++ - shared_mutex 锁排序

c - 当线程同步不重要时,互斥锁的成本如何?

python - aws cli dynamodb(ValidationException)错误

python - 在 Python 中清理损坏的 XML

python - PyTorch:如何编写仅返回权重的神经网络?

python - 从 CSV 中提取信息

python - 如何保存有元组键的字典

python - 带有 Django 的 Amazon SES SMTP

ios - 无法在 Swift 中更新字典的值

linux - 用于 Linux 的混合互斥库