ADT for restricted set of values
Graham Fawcett
graham.fawcett at gmail.com
Thu Nov 3 20:11:43 EST 2005
Ben Finney wrote:
> Howdy all,
>
> I'd like to have an Abstract Data Type for a scalar value that is
> restricted to a small set of values. Like an Enum, I suppose.
>
> What I would like is to be able to use simple 'str' values in most of
> the code, but where the values are actually used in a semantically
> meaningful context, have them used as an ADT that will barf if the
> value isn't part of the set.
How about this:
class BaseEnum(str):
"""Base class for enumerations. You must subclass and provide
values for the _valid list."""
_valid = []
def __init__(self, v):
assert self in self._valid, 'value %r not in %r' % (self,
self._valid)
cass Gender(BaseEnum):
_valid = ['male', 'female', 'unknown']
Trying the following:
Gender('male')
Gender('female')
assert Gender('male') == 'male'
Gender('shemale')
The last will return an error:
AssertionError: value 'shemale' not in ['male', 'female', 'unknown']
Graham
More information about the Python-list
mailing list