Skip to content

Commit 0ecc18f

Browse files
pythongh-93847: Fix repr of enum of generic aliases
1 parent 8ba1c7f commit 0ecc18f

File tree

3 files changed

+13
-2
lines changed

3 files changed

+13
-2
lines changed

Lib/enum.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -1237,7 +1237,7 @@ def _missing_(cls, value):
12371237
return None
12381238

12391239
def __repr__(self):
1240-
v_repr = self.__class__._value_repr_ or self._value_.__class__.__repr__
1240+
v_repr = self.__class__._value_repr_ or repr
12411241
return "<%s.%s: %s>" % (self.__class__.__name__, self._name_, v_repr(self._value_))
12421242

12431243
def __str__(self):
@@ -1509,7 +1509,7 @@ def __len__(self):
15091509

15101510
def __repr__(self):
15111511
cls_name = self.__class__.__name__
1512-
v_repr = self.__class__._value_repr_ or self._value_.__class__.__repr__
1512+
v_repr = self.__class__._value_repr_ or repr
15131513
if self._name_ is None:
15141514
return "<%s: %s>" % (cls_name, v_repr(self._value_))
15151515
else:

Lib/test/test_enum.py

+10
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import sys
77
import unittest
88
import threading
9+
import typing
910
import builtins as bltns
1011
from collections import OrderedDict
1112
from datetime import date
@@ -972,6 +973,15 @@ class SpamEnum(Enum):
972973
spam = SpamEnumNotInner
973974
self.assertEqual(SpamEnum.spam.value, SpamEnumNotInner)
974975

976+
def test_enum_of_generic_aliases(self):
977+
class E(Enum):
978+
a = typing.List[int]
979+
b = list[int]
980+
self.assertEqual(E.a.value, typing.List[int])
981+
self.assertEqual(E.b.value, list[int])
982+
self.assertEqual(repr(E.a), '<E.a: typing.List[int]>')
983+
self.assertEqual(repr(E.b), '<E.b: list[int]>')
984+
975985
@unittest.skipIf(
976986
python_version >= (3, 13),
977987
'inner classes are not members',
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix repr of enum of generic aliases.

0 commit comments

Comments
 (0)