summaryrefslogtreecommitdiffstats
path: root/Doc/howto
diff options
context:
space:
mode:
authorEthan Furman <ethan@stoneleaf.us>2023-04-18 23:19:23 (GMT)
committerGitHub <noreply@github.com>2023-04-18 23:19:23 (GMT)
commit700ec657c80e78fb299963ffaa684c859ddb8f87 (patch)
tree61a25f3c6ed737451201814626b8af53e23db6ba /Doc/howto
parent07804ce24c3103ee1bb141af31b9a1a0f92f5e43 (diff)
downloadcpython-700ec657c80e78fb299963ffaa684c859ddb8f87.zip
cpython-700ec657c80e78fb299963ffaa684c859ddb8f87.tar.gz
cpython-700ec657c80e78fb299963ffaa684c859ddb8f87.tar.bz2
gh-103596: [Enum] do not shadow mixed-in methods/attributes (GH-103600)
For example: class Book(StrEnum): title = auto() author = auto() desc = auto() Book.author.desc is Book.desc but Book.author.title() == 'Author' is commonly expected. Using upper-case member names avoids this confusion and possible performance impacts. Co-authored-by: samypr100 <3933065+samypr100@users.noreply.github.com>
Diffstat (limited to 'Doc/howto')
-rw-r--r--Doc/howto/enum.rst14
1 files changed, 11 insertions, 3 deletions
diff --git a/Doc/howto/enum.rst b/Doc/howto/enum.rst
index 56391a0..68b75c5 100644
--- a/Doc/howto/enum.rst
+++ b/Doc/howto/enum.rst
@@ -36,8 +36,10 @@ inherits from :class:`Enum` itself.
.. note:: Case of Enum Members
- Because Enums are used to represent constants we recommend using
- UPPER_CASE names for members, and will be using that style in our examples.
+ Because Enums are used to represent constants, and to help avoid issues
+ with name clashes between mixin-class methods/attributes and enum names,
+ we strongly recommend using UPPER_CASE names for members, and will be using
+ that style in our examples.
Depending on the nature of the enum a member's value may or may not be
important, but either way that value can be used to get the corresponding
@@ -490,6 +492,10 @@ the :meth:`~Enum.__repr__` omits the inherited class' name. For example::
Use the :func:`!dataclass` argument ``repr=False``
to use the standard :func:`repr`.
+.. versionchanged:: 3.12
+ Only the dataclass fields are shown in the value area, not the dataclass'
+ name.
+
Pickling
--------
@@ -992,7 +998,9 @@ but remain normal attributes.
Enum members are instances of their enum class, and are normally accessed as
``EnumClass.member``. In certain situations, such as writing custom enum
behavior, being able to access one member directly from another is useful,
-and is supported.
+and is supported; however, in order to avoid name clashes between member names
+and attributes/methods from mixed-in classes, upper-case names are strongly
+recommended.
.. versionchanged:: 3.5