En Wed, 21 Oct 2009 18:40:01 -0300, Andreas Balogh <balo...@gmail.com> escribió:

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 key:

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

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

Reply via email to