From: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> Date: Wed, 23 Sep 2020 03:58:32 +0000 (-0700) Subject: bpo-37062: Enum: add extended AutoNumber example (GH-22349) (GH-22370) X-Git-Tag: v3.9.1rc1~226 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=64362c2e435eddc5e84cea313d92bc0b96d227f7;p=thirdparty%2FPython%2Fcpython.git bpo-37062: Enum: add extended AutoNumber example (GH-22349) (GH-22370) (cherry picked from commit 62e40d8450b9c78346ec3617de7fe3f0ad381510) Co-authored-by: Ethan Furman --- diff --git a/Doc/library/enum.rst b/Doc/library/enum.rst index 5f0762edc259..a3c51655576b 100644 --- a/Doc/library/enum.rst +++ b/Doc/library/enum.rst @@ -887,6 +887,32 @@ Using an auto-numbering :meth:`__new__` would look like:: >>> Color.GREEN.value 2 +To make a more general purpose ``AutoNumber``, add ``*args`` to the signature:: + + >>> class AutoNumber(NoValue): + ... def __new__(cls, *args): # this is the only change from above + ... value = len(cls.__members__) + 1 + ... obj = object.__new__(cls) + ... obj._value_ = value + ... return obj + ... + +Then when you inherit from ``AutoNumber`` you can write your own ``__init__`` +to handle any extra arguments:: + + >>> class Swatch(AutoNumber): + ... def __init__(self, pantone='unknown'): + ... self.pantone = pantone + ... AUBURN = '3497' + ... SEA_GREEN = '1246' + ... BLEACHED_CORAL = () # New color, no Pantone code yet! + ... + >>> Swatch.SEA_GREEN + + >>> Swatch.SEA_GREEN.pantone + '1246' + >>> Swatch.BLEACHED_CORAL.pantone + 'unknown' .. note:: diff --git a/Misc/ACKS b/Misc/ACKS index 5e0953ae91b1..a16f15a74ebd 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -1713,6 +1713,7 @@ Févry Thibault Lowe Thiderman Nicolas M. Thiéry James Thomas +Reuben Thomas Robin Thomas Brian Thorne Christopher Thorne