summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEthan Furman <ethan@stoneleaf.us>2014-09-17 02:13:31 (GMT)
committerEthan Furman <ethan@stoneleaf.us>2014-09-17 02:13:31 (GMT)
commitf75805edb8d1399586bae6c12611705a4345b572 (patch)
treea2e497eb33ff33021c9601534a00f42b5bf2e2e0
parent0081f23a08b6f661a57a62c9ab8ce38bf90e8ed7 (diff)
downloadcpython-f75805edb8d1399586bae6c12611705a4345b572.zip
cpython-f75805edb8d1399586bae6c12611705a4345b572.tar.gz
cpython-f75805edb8d1399586bae6c12611705a4345b572.tar.bz2
Issue21738: clarify usage of __new__ in Enum subclasses
-rw-r--r--Doc/library/enum.rst15
1 files changed, 9 insertions, 6 deletions
diff --git a/Doc/library/enum.rst b/Doc/library/enum.rst
index acdcf7f..503d305 100644
--- a/Doc/library/enum.rst
+++ b/Doc/library/enum.rst
@@ -586,8 +586,7 @@ Avoids having to specify the value for each enumeration member::
The :meth:`__new__` method, if defined, is used during creation of the Enum
members; it is then replaced by Enum's :meth:`__new__` which is used after
- class creation for lookup of existing members. Due to the way Enums are
- supposed to behave, there is no way to customize Enum's :meth:`__new__`.
+ class creation for lookup of existing members.
OrderedEnum
@@ -743,7 +742,11 @@ but not of the class::
>>> dir(Planet.EARTH)
['__class__', '__doc__', '__module__', 'name', 'surface_gravity', 'value']
-A :meth:`__new__` method will only be used for the creation of the
-:class:`Enum` members -- after that it is replaced. This means if you wish to
-change how :class:`Enum` members are looked up you either have to write a
-helper function or a :func:`classmethod`.
+The :meth:`__new__` method will only be used for the creation of the
+:class:`Enum` members -- after that it is replaced. Any custom :meth:`__new__`
+method must create the object and set the :attr:`_value_` attribute
+appropriately.
+
+If you wish to change how :class:`Enum` members are looked up you should either
+write a helper function or a :func:`classmethod` for the :class:`Enum`
+subclass.