Skip to content

Commit 138db8e

Browse files
gh-93847: Fix repr of enum of generic aliases (GH-93885)
1 parent ab45c1d commit 138db8e

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):
@@ -1512,7 +1512,7 @@ def __len__(self):
15121512

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

Lib/test/test_enum.py

+10
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import sys
88
import unittest
99
import threading
10+
import typing
1011
import builtins as bltns
1112
from collections import OrderedDict
1213
from datetime import date
@@ -980,6 +981,15 @@ class SpamEnum(Enum):
980981
spam = SpamEnumNotInner
981982
self.assertEqual(SpamEnum.spam.value, SpamEnumNotInner)
982983

984+
def test_enum_of_generic_aliases(self):
985+
class E(Enum):
986+
a = typing.List[int]
987+
b = list[int]
988+
self.assertEqual(E.a.value, typing.List[int])
989+
self.assertEqual(E.b.value, list[int])
990+
self.assertEqual(repr(E.a), '<E.a: typing.List[int]>')
991+
self.assertEqual(repr(E.b), '<E.b: list[int]>')
992+
983993
@unittest.skipIf(
984994
python_version >= (3, 13),
985995
'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)