On Sat, Mar 17, 2012 at 4:18 AM, Steven D'Aprano <steve+comp.lang.pyt...@pearwood.info> wrote: > Note that it is important for my purposes that MockChainMap does not > inherit from dict.
Care to elaborate? > Now I try to create a function that uses a MockChainMap instead of a dict > for its globals: > > function = type(lambda: None) > f = lambda x: (a+b+x) > g = function(f.__code__, MockChainMap(), 'g') > > And that's where I get into trouble: > > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > TypeError: function() argument 2 must be dict, not MockChainMap > > > How do I build a function with globals set to a non-dict mapping? > > If this can't be done, any suggestions for how I might proceed? This looks like one of those cases where there is strict type checking (of a Python object) at the C level. You may consider bringing this up in a tracker ticket. Unless there are performance implications, it's likely a case of no one having bothered to change this spot to be more duck-type friendly. There are quite a few of those in CPython and I've seen at least a couple updated when someone brought it up. Regardless, you could also implement __call__() on a function look-alike class to get what you're after. It may not be as performant though. -eric -- http://mail.python.org/mailman/listinfo/python-list