Alex Martelli wrote:
Nick Coghlan <[EMAIL PROTECTED]> wrote:


We could use __add__, instead for combining namespaces

Update already let's us combine namespaces. To create a new object that merges two namespaces do: namespace.update(namespace(ns_1), ns_2)


One thing I'd like to see in namespaces is _chaining_ -- keeping each
namespace separate but having lookups proceed along the chain.  (The
best semantics for _bindings_ as opposed to lookups isn't clear though).

I'm not sure I understand exactly what you're looking for here... Is this what you want?


py> b = Bunch.chain(Bunch(x=1), Bunch(x=2, y=2), Bunch(y=3))
py> b.x
1
py> del b.x
py> b.x
2
py> del b.x
py> b.x
Traceback (most recent call last):
File "<interactive input>", line 1, in ?
File "D:\Steve\My Programming\python\bunch.py", line 104, in __getattribute__
raise AttributeError(name)
AttributeError: x
py> b.y
2
py> del b.y
py> b.y
3
py> del b.y
py> b.y
Traceback (most recent call last):
File "<interactive input>", line 1, in ?
File "D:\Steve\My Programming\python\bunch.py", line 104, in __getattribute__
raise AttributeError(name)
AttributeError: y


Or should 'del b.x' remove all 'x' attributes from all the bunches in the chain?


The code I used for this looks like:

class Bunch(object):
    ...
    class chain(object):
        def __init__(self, *bunches):
            self._bunches = bunches
        def __getattribute__(self, name):
            getattribute = super(Bunch.chain, self).__getattribute__
            try:
                return getattribute(name)
            except AttributeError:
                for bunch in getattribute('_bunches'):
                    try:
                        return getattr(bunch, name)
                    except AttributeError:
                        pass
                raise AttributeError(name)
        def __delattr__(self, name):
            for bunch in self._bunches:
                try:
                    return delattr(bunch, name)
                except AttributeError:
                    pass
            raise AttributeError(name)

I didn't know what to do for __setattr__... Was that what you meant by "The best semantics for _bindings_ as opposed to lookups isn't clear though"?

Steve
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to