[Python-Dev] Dictionary subclasses and exec (original) (raw)

Andrew Kuchling akuchlin@mems-exchange.org
23 Oct 2001 20:13:29 -0000


The following bit of code defines a dictionary that folds all its keys to lowercase before inserting them, but 'exec "Name = 1" in LowerCaseDict()' doesn't seem to call my getitem(), as the listed keys include 'Name'. Should this be expected to work?

--amk

class LowerCaseDict(dictionary): def _fold_key (self, key): if not isinstance(key, str): raise TypeError, "All keys must be strings" return key.lower()

def __getitem__ (self, key):
    key = self._fold_key(key)
    return dictionary.__getitem__(self, key)

def __setitem__ (self, key, value):
    key = self._fold_key(key)
    dictionary.__setitem__(self, key, value)

def __delitem__ (self, key):
    key = self._fold_key(key)
    dictionary.__delitem__(self, key, value)

d = LowerCaseDict() exec 'Name = 1' in d print d.keys()