Classes derived from dict and eval

Jeremy Sanders jeremy+python at jeremysanders.net
Tue Sep 20 22:40:22 CEST 2005


Hi -

I'm trying to subclass a dict which is used as the globals environment of
an eval expression. For instance:

class Foo(dict):
    def __init__(self):
        self.update(globals())
        self['val'] = 42
                 
    def __getitem__(self, item):
        # this doesn't get called from the eval statement
        print "*", item
        return dict.__getitem__(self, item)

a = Foo()

print a['val']
print eval('val*2+6', a)

The first print statements also prints "* val", but __getitem__ is never
called by the evaluation in the eval statement.

Is this a bug? Does anyone have an idea for a workaround? I'm using
Python 2.3.3.

Thanks

Jeremy



More information about the Python-list mailing list