[Python-checkins] gh-102558: [Enum] fix AttributeError during member repr() (GH-102601)

miss-islington webhook-mailer at python.org
Thu Mar 23 16:56:46 EDT 2023


https://github.com/python/cpython/commit/8132aefa0f23cb65b004e6f7b203f9f7b47fd997
commit: 8132aefa0f23cb65b004e6f7b203f9f7b47fd997
branch: 3.11
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: miss-islington <31488909+miss-islington at users.noreply.github.com>
date: 2023-03-23T13:56:38-07:00
summary:

gh-102558: [Enum] fix AttributeError during member repr() (GH-102601)

(cherry picked from commit bd063756b34003c1bc7cacf5b1bd90a409180fb6)

Co-authored-by: Dong-hee Na <donghee.na at python.org>

files:
M Lib/enum.py
M Lib/test/test_enum.py

diff --git a/Lib/enum.py b/Lib/enum.py
index 5cff41713ae5..ea55f7bbef86 100644
--- a/Lib/enum.py
+++ b/Lib/enum.py
@@ -1187,6 +1187,8 @@ def _missing_(cls, value):
         return None
 
     def __repr__(self):
+        if not isinstance(self, Enum):
+            return repr(self)
         v_repr = self.__class__._value_repr_ or repr
         return "<%s.%s: %s>" % (self.__class__.__name__, self._name_, v_repr(self._value_))
 
diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py
index 72dfb9881779..2a305e415cd9 100644
--- a/Lib/test/test_enum.py
+++ b/Lib/test/test_enum.py
@@ -11,7 +11,7 @@
 import builtins as bltns
 from collections import OrderedDict
 from datetime import date
-from enum import Enum, IntEnum, StrEnum, EnumType, Flag, IntFlag, unique, auto
+from enum import Enum, EnumMeta, IntEnum, StrEnum, EnumType, Flag, IntFlag, unique, auto
 from enum import STRICT, CONFORM, EJECT, KEEP, _simple_enum, _test_simple_enum
 from enum import verify, UNIQUE, CONTINUOUS, NAMED_FLAGS, ReprEnum
 from enum import member, nonmember, _iter_bits_lsb
@@ -632,6 +632,13 @@ class MySubEnum(MyEnum):
             theother = auto()
         self.assertEqual(repr(MySubEnum.that), "My name is that.")
 
+    def test_multiple_superclasses_repr(self):
+        class _EnumSuperClass(metaclass=EnumMeta):
+            pass
+        class E(_EnumSuperClass, Enum):
+            A = 1
+        self.assertEqual(repr(E.A), "<E.A: 1>")
+
     def test_reversed_iteration_order(self):
         self.assertEqual(
                 list(reversed(self.MainEnum)),



More information about the Python-checkins mailing list