锁定自定义词典

Rin*_*nce 2 python dictionary locking

美好的一天蟒蛇,

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

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

任何帮助深表感谢.

UPD:

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

字典调用在__setitem__初始化时添加项目而不是找到引发错误的键.

cupboard = pick('milk')  #raises error
Run Code Online (Sandbox Code Playgroud)

upd1:

一切都解决了,非常感谢你.

Ant*_*sma 12

__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
Run Code Online (Sandbox Code Playgroud)

您还需要覆盖dict.update()setdefault()避免添加键.和可能dict.__delitem__(),dict.clear(),dict.pop()dict.popitem()避免去除键.