ADT for restricted set of values
Ben Finney
bignose+hates-spam at benfinney.id.au
Thu Nov 3 19:56:05 EST 2005
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.
Using the HumanSex class example from an earlier thread:
class HumanSex(str):
_descriptions = {
None: "unknown",
'male': "Male",
'female': "Female",
}
def __init__(self, value):
str.__init__(value)
if value not in self._descriptions:
raise ValueError, \
"Not a valid HumanSex value: '%s'" % value
def __get_description(self):
return self._descriptions[self]
description = property(__get_description)
This way, most of the rest of the code doesn't need to know that the
HumanSex instances are anything but a simple 'str' value.
Is this a sensible way to do what I'm describing? Am I missing a
common programming pattern?
--
\ "I bought a self learning record to learn Spanish. I turned it |
`\ on and went to sleep; the record got stuck. The next day I |
_o__) could only stutter in Spanish." -- Steven Wright |
Ben Finney
More information about the Python-list
mailing list