我正在考虑如何实现InsertOnlyDict
,它具有的属性是,如果键已经存在,则不能将其设置为新值。
实现它的一种方法是编写如下内容:
class InsertOnlyDict(dict):
def __setitem__(self, key, value):
if key in self:
raise ....
super(InsertOnlyDict, self).__setitem__(key, value)
上面的方法有一个问题,如果调用者使用dict.__setitem__(x, k, v)
,它仍然可以更新它。
实现此目标的第二种方法是编写
class InsertOnlyDict(object):
__slots__ = ('_internal',)
def __init__(self, *args, **kwargs):
self._internal = dict(*args, **kwargs):
def __setitem__(self, key, value):
if key in self._internal:
raise....
self._internal[key] = value
此方法最令人担心的是,此InsertOnlyDict
不再是dict
,因此可能无法通过isinstance(x, dict)
之类的检查。
有什么办法可以解决吗?例如使一个班级实际上不使用父母的班级,同时仍通过isinstance(x, dict)
之类的检查?
您如何看待这些方法?