diff --git a/Lib/enum.py b/Lib/enum.py index fe521b1018d481..cc656514106b31 100644 --- a/Lib/enum.py +++ b/Lib/enum.py @@ -1240,7 +1240,7 @@ def _missing_(cls, value): 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 @@ def __len__(self): 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: diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py index 56cebfea3f1ba9..ec39613291b05f 100644 --- a/Lib/test/test_enum.py +++ b/Lib/test/test_enum.py @@ -6,6 +6,7 @@ import sys import unittest import threading +import typing import builtins as bltns from collections import OrderedDict from datetime import date @@ -970,6 +971,15 @@ class SpamEnum(Enum): 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), '') + self.assertEqual(repr(E.b), '') + @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 index 00000000000000..c6947575e67e1c --- /dev/null +++ b/Misc/NEWS.d/next/Library/2022-06-16-09-24-50.gh-issue-93847.kuv8bN.rst @@ -0,0 +1 @@ +Fix repr of enum of generic aliases.