Skip to content

Commit cf72cc2

Browse files
gh-98298, gh-74730: [Enum] update docs (GH-103163)
fix FlagBoundary statements add warning about reloading modules and enum identity (cherry picked from commit 5ffc1e5) Co-authored-by: Ethan Furman <ethan@stoneleaf.us>
1 parent 8236222 commit cf72cc2

File tree

3 files changed

+34
-30
lines changed

3 files changed

+34
-30
lines changed

Doc/howto/enum.rst

+5
Original file line numberDiff line numberDiff line change
@@ -371,6 +371,11 @@ below)::
371371
>>> Color.BLUE == 2
372372
False
373373

374+
.. warning::
375+
376+
It is possible to reload modules -- if a reloaded module contains
377+
enums, they will be recreated, and the new members may not
378+
compare identical/equal to the original members.
374379

375380
Allowed members and attributes of enumerations
376381
----------------------------------------------

Doc/library/enum.rst

+25-26
Original file line numberDiff line numberDiff line change
@@ -141,9 +141,8 @@ Module Contents
141141
:func:`global_enum`
142142

143143
Modify the :class:`str() <str>` and :func:`repr` of an enum
144-
to show its members as belonging to the module instead of its class.
145-
Should only be used if the enum members will be exported to the
146-
module global namespace.
144+
to show its members as belonging to the module instead of its class,
145+
and export the enum members to the global namespace.
147146

148147
:func:`show_flag_values`
149148

@@ -170,6 +169,27 @@ Data Types
170169
final *enum*, as well as creating the enum members, properly handling
171170
duplicates, providing iteration over the enum class, etc.
172171

172+
.. method:: EnumType.__call__(cls, value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)
173+
174+
This method is called in two different ways:
175+
176+
* to look up an existing member:
177+
178+
:cls: The enum class being called.
179+
:value: The value to lookup.
180+
181+
* to use the ``cls`` enum to create a new enum (only if the existing enum
182+
does not have any members):
183+
184+
:cls: The enum class being called.
185+
:value: The name of the new Enum to create.
186+
:names: The names/values of the members for the new Enum.
187+
:module: The name of the module the new Enum is created in.
188+
:qualname: The actual location in the module where this Enum can be found.
189+
:type: A mix-in type for the new Enum.
190+
:start: The first integer value for the Enum (used by :class:`auto`).
191+
:boundary: How to handle out-of-range values from bit operations (:class:`Flag` only).
192+
173193
.. method:: EnumType.__contains__(cls, member)
174194

175195
Returns ``True`` if member belongs to the ``cls``::
@@ -262,26 +282,6 @@ Data Types
262282
names will also be removed from the completed enumeration. See
263283
:ref:`TimePeriod <enum-time-period>` for an example.
264284

265-
.. method:: Enum.__call__(cls, value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)
266-
267-
This method is called in two different ways:
268-
269-
* to look up an existing member:
270-
271-
:cls: The enum class being called.
272-
:value: The value to lookup.
273-
274-
* to use the ``cls`` enum to create a new enum:
275-
276-
:cls: The enum class being called.
277-
:value: The name of the new Enum to create.
278-
:names: The names/values of the members for the new Enum.
279-
:module: The name of the module the new Enum is created in.
280-
:qualname: The actual location in the module where this Enum can be found.
281-
:type: A mix-in type for the new Enum.
282-
:start: The first integer value for the Enum (used by :class:`auto`).
283-
:boundary: How to handle out-of-range values from bit operations (:class:`Flag` only).
284-
285285
.. method:: Enum.__dir__(self)
286286

287287
Returns ``['__class__', '__doc__', '__module__', 'name', 'value']`` and
@@ -722,7 +722,6 @@ Data Types
722722
.. attribute:: EJECT
723723

724724
Out-of-range values lose their *Flag* membership and revert to :class:`int`.
725-
This is the default for :class:`IntFlag`::
726725

727726
>>> from enum import Flag, EJECT, auto
728727
>>> class EjectFlag(Flag, boundary=EJECT):
@@ -734,8 +733,8 @@ Data Types
734733

735734
.. attribute:: KEEP
736735

737-
Out-of-range values are kept, and the *Flag* membership is kept. This is
738-
used for some stdlib flags::
736+
Out-of-range values are kept, and the *Flag* membership is kept.
737+
This is the default for :class:`IntFlag`::
739738

740739
>>> from enum import Flag, KEEP, auto
741740
>>> class KeepFlag(Flag, boundary=KEEP):

Lib/enum.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -1302,10 +1302,10 @@ def _reduce_ex_by_global_name(self, proto):
13021302
class FlagBoundary(StrEnum):
13031303
"""
13041304
control how out of range values are handled
1305-
"strict" -> error is raised [default for Flag]
1306-
"conform" -> extra bits are discarded
1307-
"eject" -> lose flag status [default for IntFlag]
1308-
"keep" -> keep flag status and all bits
1305+
"strict" -> error is raised
1306+
"conform" -> extra bits are discarded [default for Flag]
1307+
"eject" -> lose flag status
1308+
"keep" -> keep flag status and all bits [default for IntFlag]
13091309
"""
13101310
STRICT = auto()
13111311
CONFORM = auto()

0 commit comments

Comments
 (0)