]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-93847: Fix repr of enum of generic aliases (GH-93885)
authorSerhiy Storchaka <storchaka@gmail.com>
Thu, 16 Jun 2022 19:16:12 +0000 (22:16 +0300)
committerGitHub <noreply@github.com>
Thu, 16 Jun 2022 19:16:12 +0000 (12:16 -0700)
Lib/enum.py
Lib/test/test_enum.py
Misc/NEWS.d/next/Library/2022-06-16-09-24-50.gh-issue-93847.kuv8bN.rst [new file with mode: 0644]

index ee32d5d4e058bc497af0d33e7a12fdcdb950aa94..20fad97e3d1997c669573d64ac4c849e4f518dfe 100644 (file)
@@ -1237,7 +1237,7 @@ class Enum(metaclass=EnumType):
         return None
 
     def __repr__(self):
-        v_repr = self.__class__._value_repr_ or self._value_.__class__.__repr__
+        v_repr = self.__class__._value_repr_ or repr
         return "<%s.%s: %s>" % (self.__class__.__name__, self._name_, v_repr(self._value_))
 
     def __str__(self):
@@ -1512,7 +1512,7 @@ class Flag(Enum, boundary=STRICT):
 
     def __repr__(self):
         cls_name = self.__class__.__name__
-        v_repr = self.__class__._value_repr_ or self._value_.__class__.__repr__
+        v_repr = self.__class__._value_repr_ or repr
         if self._name_ is None:
             return "<%s: %s>" % (cls_name, v_repr(self._value_))
         else:
index 28594b010d80d32993af6465e09678e560925c34..2fadb4eaa1d824ebfbb8d69f8834bb1d7d636061 100644 (file)
@@ -7,6 +7,7 @@ import pydoc
 import sys
 import unittest
 import threading
+import typing
 import builtins as bltns
 from collections import OrderedDict
 from datetime import date
@@ -980,6 +981,15 @@ class TestSpecial(unittest.TestCase):
             spam = SpamEnumNotInner
         self.assertEqual(SpamEnum.spam.value, SpamEnumNotInner)
 
+    def test_enum_of_generic_aliases(self):
+        class E(Enum):
+            a = typing.List[int]
+            b = list[int]
+        self.assertEqual(E.a.value, typing.List[int])
+        self.assertEqual(E.b.value, list[int])
+        self.assertEqual(repr(E.a), '<E.a: typing.List[int]>')
+        self.assertEqual(repr(E.b), '<E.b: list[int]>')
+
     @unittest.skipIf(
             python_version >= (3, 13),
             'inner classes are not members',
diff --git a/Misc/NEWS.d/next/Library/2022-06-16-09-24-50.gh-issue-93847.kuv8bN.rst b/Misc/NEWS.d/next/Library/2022-06-16-09-24-50.gh-issue-93847.kuv8bN.rst
new file mode 100644 (file)
index 0000000..c694757
--- /dev/null
@@ -0,0 +1 @@
+Fix repr of enum of generic aliases.