https://github.com/python/cpython/commit/629a363ddd2889f023d5925506e61f5b6647accd
commit: 629a363ddd2889f023d5925506e61f5b6647accd
branch: main
author: Rafael Weingartner-Ortner <[email protected]>
committer: ethanfurman <[email protected]>
date: 2026-02-13T11:51:56-08:00
summary:

gh-136672: Docs: Move parts of Enum HOWTO to API Docs (GH-139176)

To avoid duplicate content in the Enum HOWTO and
API documentation which is not automatically synced,
the section about supported __dunder__ and _sunder
names is moved from HOWTO to API docs.

See also https://github.com/python/cpython/pull/136791

files:
M Doc/howto/enum.rst
M Doc/library/enum.rst

diff --git a/Doc/howto/enum.rst b/Doc/howto/enum.rst
index 7713aede6d564a..93850b57af2c65 100644
--- a/Doc/howto/enum.rst
+++ b/Doc/howto/enum.rst
@@ -965,75 +965,16 @@ want one of them to be the value::
 
 
 Finer Points
-^^^^^^^^^^^^
-
-Supported ``__dunder__`` names
-""""""""""""""""""""""""""""""
-
-:attr:`~enum.EnumType.__members__` is a read-only ordered mapping of 
``member_name``:``member``
-items.  It is only available on the class.
-
-:meth:`~object.__new__`, if specified, must create and return the enum 
members; it is
-also a very good idea to set the member's :attr:`~Enum._value_` appropriately. 
 Once
-all the members are created it is no longer used.
-
-
-Supported ``_sunder_`` names
-""""""""""""""""""""""""""""
+------------
 
-- :attr:`~Enum._name_` -- name of the member
-- :attr:`~Enum._value_` -- value of the member; can be set in ``__new__``
-- :meth:`~Enum._missing_` -- a lookup function used when a value is not found;
-  may be overridden
-- :attr:`~Enum._ignore_` -- a list of names, either as a :class:`list` or a
-  :class:`str`, that will not be transformed into members, and will be removed
-  from the final class
-- :meth:`~Enum._generate_next_value_` -- used to get an appropriate value for
-  an enum member; may be overridden
-- :meth:`~Enum._add_alias_` -- adds a new name as an alias to an existing
-  member.
-- :meth:`~Enum._add_value_alias_` -- adds a new value as an alias to an
-  existing member.  See `MultiValueEnum`_ for an example.
+Supported ``__dunder__`` and ``_sunder_`` names
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-  .. note::
-
-     For standard :class:`Enum` classes the next value chosen is the highest
-     value seen incremented by one.
-
-     For :class:`Flag` classes the next value chosen will be the next highest
-     power-of-two.
-
-  .. versionchanged:: 3.13
-     Prior versions would use the last seen value instead of the highest value.
-
-.. versionadded:: 3.6 ``_missing_``, ``_order_``, ``_generate_next_value_``
-.. versionadded:: 3.7 ``_ignore_``
-.. versionadded:: 3.13 ``_add_alias_``, ``_add_value_alias_``
-
-To help keep Python 2 / Python 3 code in sync an :attr:`~Enum._order_` 
attribute can
-be provided.  It will be checked against the actual order of the enumeration
-and raise an error if the two do not match::
-
-    >>> class Color(Enum):
-    ...     _order_ = 'RED GREEN BLUE'
-    ...     RED = 1
-    ...     BLUE = 3
-    ...     GREEN = 2
-    ...
-    Traceback (most recent call last):
-    ...
-    TypeError: member order does not match _order_:
-      ['RED', 'BLUE', 'GREEN']
-      ['RED', 'GREEN', 'BLUE']
-
-.. note::
-
-    In Python 2 code the :attr:`~Enum._order_` attribute is necessary as 
definition
-    order is lost before it can be recorded.
+The supported ``__dunder__`` and ``_sunder_`` names can be found in the 
:ref:`Enum API documentation <enum-dunder-sunder>`.
 
 
 _Private__names
-"""""""""""""""
+^^^^^^^^^^^^^^^
 
 :ref:`Private names <private-name-mangling>` are not converted to enum members,
 but remain normal attributes.
@@ -1042,7 +983,7 @@ but remain normal attributes.
 
 
 ``Enum`` member type
-""""""""""""""""""""
+^^^^^^^^^^^^^^^^^^^^
 
 Enum members are instances of their enum class, and are normally accessed as
 ``EnumClass.member``.  In certain situations, such as writing custom enum
@@ -1055,7 +996,7 @@ recommended.
 
 
 Creating members that are mixed with other data types
-"""""""""""""""""""""""""""""""""""""""""""""""""""""
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 When subclassing other data types, such as :class:`int` or :class:`str`, with
 an :class:`Enum`, all values after the ``=`` are passed to that data type's
@@ -1069,7 +1010,7 @@ constructor.  For example::
 
 
 Boolean value of ``Enum`` classes and members
-"""""""""""""""""""""""""""""""""""""""""""""
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 Enum classes that are mixed with non-:class:`Enum` types (such as
 :class:`int`, :class:`str`, etc.) are evaluated according to the mixed-in
@@ -1084,7 +1025,7 @@ Plain :class:`Enum` classes always evaluate as 
:data:`True`.
 
 
 ``Enum`` classes with methods
-"""""""""""""""""""""""""""""
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 If you give your enum subclass extra methods, like the `Planet`_
 class below, those methods will show up in a :func:`dir` of the member,
@@ -1097,7 +1038,7 @@ but not of the class::
 
 
 Combining members of ``Flag``
-"""""""""""""""""""""""""""""
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 Iterating over a combination of :class:`Flag` members will only return the 
members that
 are comprised of a single bit::
@@ -1117,7 +1058,7 @@ are comprised of a single bit::
 
 
 ``Flag`` and ``IntFlag`` minutia
-""""""""""""""""""""""""""""""""
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 Using the following snippet for our examples::
 
@@ -1478,6 +1419,7 @@ alias::
     behaviors as well as disallowing aliases.  If the only desired change is
     disallowing aliases, the :func:`unique` decorator can be used instead.
 
+.. _multi-value-enum:
 
 MultiValueEnum
 ^^^^^^^^^^^^^^^^^
diff --git a/Doc/library/enum.rst b/Doc/library/enum.rst
index ec7cbfb52b6e99..de56048f56a243 100644
--- a/Doc/library/enum.rst
+++ b/Doc/library/enum.rst
@@ -307,6 +307,28 @@ Data Types
       No longer used, kept for backward compatibility.
       (class attribute, removed during class creation).
 
+      The :attr:`~Enum._order_` attribute can be provided to help keep Python 
2 / Python 3 code in sync.
+      It will be checked against the actual order of the enumeration and raise 
an error if the two do not match::
+
+         >>> class Color(Enum):
+         ...     _order_ = 'RED GREEN BLUE'
+         ...     RED = 1
+         ...     BLUE = 3
+         ...     GREEN = 2
+         ...
+         Traceback (most recent call last):
+         ...
+         TypeError: member order does not match _order_:
+            ['RED', 'BLUE', 'GREEN']
+            ['RED', 'GREEN', 'BLUE']
+
+      .. note::
+
+         In Python 2 code the :attr:`~Enum._order_` attribute is necessary as 
definition
+         order is lost before it can be recorded.
+
+      .. versionadded:: 3.6
+
    .. attribute:: Enum._ignore_
 
       ``_ignore_`` is only used during creation and is removed from the
@@ -316,6 +338,8 @@ Data Types
       names will also be removed from the completed enumeration.  See
       :ref:`TimePeriod <enum-time-period>` for an example.
 
+      .. versionadded:: 3.7
+
    .. method:: Enum.__dir__(self)
 
       Returns ``['__class__', '__doc__', '__module__', 'name', 'value']`` and
@@ -346,7 +370,16 @@ Data Types
          :last_values: A list of the previous values.
 
       A *staticmethod* that is used to determine the next value returned by
-      :class:`auto`::
+      :class:`auto`.
+
+      .. note::
+         For standard :class:`Enum` classes the next value chosen is the 
highest
+         value seen incremented by one.
+
+         For :class:`Flag` classes the next value chosen will be the next 
highest
+         power-of-two.
+
+      This method may be overridden, e.g.::
 
          >>> from enum import auto, Enum
          >>> class PowersOfThree(Enum):
@@ -359,6 +392,10 @@ Data Types
          >>> PowersOfThree.SECOND.value
          9
 
+      .. versionadded:: 3.6
+      .. versionchanged:: 3.13
+         Prior versions would use the last seen value instead of the highest 
value.
+
    .. method:: Enum.__init__(self, *args, **kwds)
 
       By default, does nothing.  If multiple values are given in the member
@@ -397,6 +434,8 @@ Data Types
          >>> Build('deBUG')
          <Build.DEBUG: 'debug'>
 
+      .. versionadded:: 3.6
+
    .. method:: Enum.__new__(cls, *args, **kwds)
 
       By default, doesn't exist.  If specified, either in the enum class
@@ -490,7 +529,8 @@ Data Types
          >>> Color(42)
          <Color.RED: 1>
 
-      Raises a :exc:`ValueError` if the value is already linked with a 
different member.
+      | Raises a :exc:`ValueError` if the value is already linked with a 
different member.
+      | See :ref:`multi-value-enum` for an example.
 
       .. versionadded:: 3.13
 
@@ -889,6 +929,8 @@ Data Types
 
 ---------------
 
+.. _enum-dunder-sunder:
+
 Supported ``__dunder__`` names
 """"""""""""""""""""""""""""""
 
@@ -896,7 +938,7 @@ Supported ``__dunder__`` names
 items.  It is only available on the class.
 
 :meth:`~Enum.__new__`, if specified, must create and return the enum members;
-it is also a very good idea to set the member's :attr:`!_value_` appropriately.
+it is also a very good idea to set the member's :attr:`~Enum._value_` 
appropriately.
 Once all the members are created it is no longer used.
 
 
@@ -912,17 +954,10 @@ Supported ``_sunder_`` names
   from the final class
 - :attr:`~Enum._order_` -- no longer used, kept for backward
   compatibility (class attribute, removed during class creation)
+
 - :meth:`~Enum._generate_next_value_` -- used to get an appropriate value for
   an enum member; may be overridden
 
-  .. note::
-
-     For standard :class:`Enum` classes the next value chosen is the highest
-     value seen incremented by one.
-
-     For :class:`Flag` classes the next value chosen will be the next highest
-     power-of-two.
-
 - :meth:`~Enum._add_alias_` -- adds a new name as an alias to an existing
   member.
 - :meth:`~Enum._add_value_alias_` -- adds a new value as an alias to an

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]

Reply via email to