[Python-checkins] bpo-37062: Enum: add extended AutoNumber example (GH-22349) (GH-22369)
Miss Islington (bot)
webhook-mailer at python.org
Tue Sep 22 23:57:57 EDT 2020
https://github.com/python/cpython/commit/5acc1b5f0b62eef3258e4bc31eba3b9c659108c9
commit: 5acc1b5f0b62eef3258e4bc31eba3b9c659108c9
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: GitHub <noreply at github.com>
date: 2020-09-22T20:57:48-07:00
summary:
bpo-37062: Enum: add extended AutoNumber example (GH-22349) (GH-22369)
(cherry picked from commit 62e40d8450b9c78346ec3617de7fe3f0ad381510)
Co-authored-by: Ethan Furman <ethan at stoneleaf.us>
files:
M Doc/library/enum.rst
M Misc/ACKS
diff --git a/Doc/library/enum.rst b/Doc/library/enum.rst
index 8753416a27416..bd10016b937b4 100644
--- a/Doc/library/enum.rst
+++ b/Doc/library/enum.rst
@@ -888,6 +888,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: 2>
+ >>> Swatch.SEA_GREEN.pantone
+ '1246'
+ >>> Swatch.BLEACHED_CORAL.pantone
+ 'unknown'
.. note::
diff --git a/Misc/ACKS b/Misc/ACKS
index eee6b9accaa50..8d355da8fde05 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -1678,6 +1678,7 @@ Févry Thibault
Lowe Thiderman
Nicolas M. Thiéry
James Thomas
+Reuben Thomas
Robin Thomas
Brian Thorne
Christopher Thorne
More information about the Python-checkins
mailing list