问题
实验楼python挑战赛1 实现一个不可变的dict,数据只能由类初始化的时候通过参数传递,修改、添加都会抛出TypeError
解决方法
继承ABCs中的MultiMapping, 复写其中的部分方法即可。
代码
import collections
class ImmutableDict(collections.MutableMapping):
def __init__(self, **kwargs):
self.store = dict(**kwargs)
self.error = TypeError("'ImmutableDict' objects are immutable")
# self.update(dict(*args, **kwargs))
def __setitem__(self, key, value):
# 涉及到修改时会触发这个方法
raise self.error
def __iter__(self):
return iter(self.store)
def __delitem__(self, key):
# 删除时触发
raise self.error
def __getitem__(self, key):
return self.store[key]
def __len__(self):
return len(self.store)
class Get(object):
def __init__(self):
pass
def __getitem__(self, item):
return hash(ite