Python 们好,
我想制作一个具有两个主要功能的自定义词典:
- 所有键都在创建时声明
- 无法添加新键或修改当前键(值仍然可以修改)
现在代码是这样的:
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/