which "dictionary with attribute-style access"?

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Thu Oct 22 06:34:48 CEST 2009

En Wed, 21 Oct 2009 18:40:01 -0300, Andreas Balogh <baloand at gmail.com>  

> Gabriel, thanks for your hint. I've managed to create an implementation  
> of an AttrDict passing Gabriels tests.
> Any more comments about the pythonicness of this implementation?
> class AttrDict(dict):
>      """A dict whose items can also be accessed as member variables."""
>      def __init__(self, *args, **kwargs):
>          dict.__init__(self, *args, **kwargs)
>          self.__dict__ = self
>      def copy(self):
>          return AttrDict(self)
>      def __repr__(self):
>          return 'AttrDict(' + dict.__repr__(self) + ')'
>      @classmethod
>      def fromkeys(self, seq, value = None):
>          return AttrDict(dict.fromkeys(seq, value))

Looks fine as long as nobody uses an existing method name as a dictionary  

py> d = AttrDict({'name':'value'})
py> d.items()
[('name', 'value')]
py> d = AttrDict({'items': [1,2,3]})
py> d.items()
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
TypeError: 'list' object is not callable

(I should have included a test case for this issue too).
Of course, if this doesn't matter in your application, go ahead and use  
it. Just be aware of the problem.

Gabriel Genellina

More information about the Python-list mailing list