假设我要实现一个InsertOnlyDict,实现它的最佳方法是什么?

时间:2019-06-05 01:20:13

标签: python

我正在考虑如何实现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)之类的检查?

您如何看待这些方法?

0 个答案:

没有答案