]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-102558: [Enum] fix AttributeError during member repr() (GH-102601)
authorDong-hee Na <donghee.na@python.org>
Thu, 23 Mar 2023 20:30:18 +0000 (05:30 +0900)
committerGitHub <noreply@github.com>
Thu, 23 Mar 2023 20:30:18 +0000 (13:30 -0700)
Lib/enum.py
Lib/test/test_enum.py

index d14e91a9b017d14ec1f107f814684136f6c890db..ba927662a43b13d13653be98f80b35b51f6c1ccf 100644 (file)
@@ -1186,6 +1186,8 @@ class Enum(metaclass=EnumType):
         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_))
 
index a11bb441f06e8eeb61881b0b875c2b6b02c6be4a..bb163c46481a42070420ca255bad1f6800c6c885 100644 (file)
@@ -11,7 +11,7 @@ import typing
 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
@@ -644,6 +644,13 @@ class _EnumTests:
             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)),