[Python-Dev] Enumeration item arguments?

Eli Bendersky eliben at gmail.com
Tue Apr 30 06:47:56 CEST 2013


On Mon, Apr 29, 2013 at 7:30 PM, Philip Jenvey <pjenvey at underboss.org>wrote:

>
> On Apr 29, 2013, at 3:25 PM, Eli Bendersky wrote:
>
> > On Mon, Apr 29, 2013 at 2:59 PM, Ethan Furman <ethan at stoneleaf.us>
> wrote:
> > In the Planet example we saw the possibility of specifying arguments to
> enum item __init__:
> >
> > class Planet(Enum):
> >     MERCURY = (3.303e+23, 2.4397e6)
> >     VENUS   = (4.869e+24, 6.0518e6)
> >     EARTH   = (5.976e+24, 6.37814e6)
> >     MARS    = (6.421e+23, 3.3972e6)
> >     JUPITER = (1.9e+27,   7.1492e7)
> >     SATURN  = (5.688e+26, 6.0268e7)
> >     URANUS  = (8.686e+25, 2.5559e7)
> >     NEPTUNE = (1.024e+26, 2.4746e7)
> >
> >     def __init__(self, mass, radius):
> >         self.mass = mass       # in kilograms
> >         self.radius = radius   # in meters
> >
> > Do we want to support this?
> >
> > I'm -1, and this is yet another bad sign of conflating enums with
> classes. If planets want to have attributes and behaviors, let them be
> normal classes. If they want a PlanetId *enum member*, that's OK, but
> there's no need to intermix the two.
>
> You may be right about the Planet example, but I wouldn't go that far.
> Additional metadata on Enum instances can be a handy feature in some cases,
> like documentation, e.g.:
>
> class Protocol(Enum):
>
>  HOPOPT = 0, "IPv6 Hop-by-Hop Option"
>  ICMP = 1, "Internet Control Message"
>  IGMP = 2, "Internet Group Management"
>
>  @property
>  def value(self):
>      return self._value[0]
>
>  @property
>  def description(self):
>    return self._value[1]
>

Note that I don't object to adding certain behaviors to enums. I'm against
taking it too far. One example of taking it too far is special
implementation provisions to make enum be more like other classes,
complicating the implementation just for this cause.

Eli
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20130429/414c54c5/attachment.html>


More information about the Python-Dev mailing list