There is more than one way to do it - and for no apparent reason.

gbreed at cix.compulink.co.uk gbreed at cix.compulink.co.uk
Mon Feb 18 10:00:56 EST 2002


Max M wrote:

> well I can allways just mix-in my own class
> 
> class IWILLHaveItMyWay:
> 
>      def __getitem__(self, key):
>          return getattr(self, key)
> 
>      def __setitem__(self, key, value):
>          setattr(self, key, value)

In 2.2, you can do better

class HaveItYourWay:
  def __getitem__(self, key):
    return getattr(self, key)
  def __setitem__(self, key, value):
    setattr(self, key, value)
  def __iter__(self):
    return self.__dict__.__iter__()

>>> dict = HaveItYourWay()
>>> dirtyList = ['keys', 'values', 'items']
>>> for item in dirtyList:
...   dict[item]=42
...
>>> for key in dict:
...   print key, dict[key]
...
keys 42
items 42
values 42
>>> dict.keys
42
>>> dict.values
42
>>> dict.items
42
>>> dict.items=31
>>> dict['items']
31


              Graham



More information about the Python-list mailing list