__getitem__ method on (meta)classes

Steven Bethard steven.bethard at gmail.com
Wed Mar 16 03:20:51 EST 2005


Steven Bethard wrote:
> 
> py> class enum(object):
> ...     class item(object):
> ...         def __init__(self, val):
> ...             self.val = val
> ...         def __repr__(self):
> ...             return 'enum.item(%r)' % self.val
> ...     def __init__(self, vals):
> ...         self.items = [type(self).item(val) for val in vals]
> ...         self._val_item_map = dict(zip(vals, self.items))
> ...         self._index_item_map = dict(enumerate(self.items))

Sorry, this was before I decided I should save items as an instance 
variable.  Drop this map, it's unnecessary.

> ...     def __call__(self, val):
> ...         try:
> ...             return self._val_item_map[val]
> ...         except KeyError:
> ...             raise TypeError("%s is not a valid %s" % (val, type(self)))
> ...     def __getitem__(self, index):
> ...         return self._index_item_map[index]

And replace this with self.items[index]

STeVe



More information about the Python-list mailing list