29c29
< __all__ = [ 'attrdict', 'optiondict' ]
---
> __all__ = [ 'attrdict', 'multiattrdict', 'optiondict' ]
31a32
> """Wrap dict, so you can use attribute access to get/set elements"""
38c39
< if attr in dir(self):
---
> if attr in dir(self) or attr.startswith('_'):
46a48,58
> class multiattrdict(attrdict):
> """Wrap attrdict so that nested attribute accesses automatically create
> nested dictionaries."""
> def __getattr__(self, attr):
> try:
> return super(multiattrdict, self).__getattr__(attr)
> except AttributeError:
> d = optiondict()
> setattr(self, attr, d)
> return d
>
47a60
> """Modify attrdict so that a missing attribute just returns None"""
52,53d64
< #d = optionsdict()
< #setattr(self, attr, d)
70a82,87
>
> x = multiattrdict()
> x.y.z = 9
> print x
> print x.y
> print x.y.z