[Python-Dev] Add a frozendict builtin type (original) (raw)

Serhiy Storchaka storchaka at gmail.com
Thu Mar 1 14:44:18 CET 2012


01.03.12 11:11, Victor Stinner написав(ла):

You can redefine dict.setitem. Ah? It doesn't work here.

dict.setitem=lambda key, value: None Traceback (most recent call last): File "", line 1, in TypeError: can't set attributes of built-in/extension type 'dict'

Hmm, yes, it's true. It was too presumptuous of me to believe that you have not considered such simple approach.

But I will try to suggest another approach. frozendict inherits from dict, but data is not stored in the parent, but in the internal dictionary. And even if dict.setitem is used, it will have no visible effect.

class frozendict(dict): def init(self, values={}): self._values = dict(values) def getitem(self, key): return self._values[key] def setitem(self, key, value): raise TypeError ("expect dict, got frozendict") ...

a = frozendict({1: 2, 3: 4}) a[1] 2 a[5] Traceback (most recent call last): File "", line 1, in File "", line 5, in getitem KeyError: 5 a[5] = 6 Traceback (most recent call last): File "", line 1, in File "", line 7, in setitem TypeError: expect dict, got frozendict dict.setitem(a, 5, 6) a[5] Traceback (most recent call last): File "", line 1, in File "", line 5, in getitem KeyError: 5



More information about the Python-Dev mailing list