ISTM that 'bunch' or 'namespace' is in effect the complement of vars i.e., while vars(object) => object.__dict__, namespace(somedict) gives an object whose __dict__ is somedict.
Yeah, I kinda liked this application too, and I think the symmetry would be nice.
Looked at this way, namespace (or bunch) is a minimal implementation of an object that implements the hasattr(object,__dict__) protocol. The effect of the class is to make operations on __dict__ simpler. namespace instances can be compared with any other object that has a __dict__. This differs from the PEP reference implementation which compares only with other bunch instances.
Yeah, I wanted to support this, but I couldn't decide how to arbitrate things in update -- if a dict has a __dict__ attribute, do I update the Namespace object with the dict or the __dict__? That is, what should I do in the following case:
py> class xdict(dict): ... pass ... py> d = xdict(a=1, b=2) py> d.x = 1 py> d {'a': 1, 'b': 2} py> d.__dict__ {'x': 1} py> Namespace(d)
The dict d has both the items of a dict and the attributes of a __dict__. Which one gets assigned to the __dict__ of the Namespace? Do I do:
self.__dict__ = d
or do I do:
self.__dict__ = d.__dict__
It was because these seem like two separate cases that I wanted two different functions for them (__init__ and, say, dictview)...
Steve -- http://mail.python.org/mailman/listinfo/python-list