Skip to content

Commit 1af8f22

Browse files
tjdcsclaude
andcommitted
Add missing _add_value_alias_ method for Python 3.13 enum
Fixes #14408 by adding the _add_value_alias_ method to the Enum class with proper Python 3.13 version guard. Also adds comprehensive test cases for the MultiValueEnum pattern. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
1 parent bb37548 commit 1af8f22

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

stdlib/@tests/test_cases/check_enum.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,30 @@ class Foo(enum.StrEnum):
3636

3737
assert_type(Foo.X, Literal[Foo.X])
3838
assert_type(Foo.X.value, str)
39+
40+
41+
if sys.version_info >= (3, 13):
42+
43+
class MultiValueEnum(enum.Enum):
44+
def __new__(cls, value, *values):
45+
self = object.__new__(cls)
46+
self._value_ = value
47+
for v in values:
48+
self._add_value_alias_(v)
49+
return self
50+
51+
class DType(MultiValueEnum):
52+
float32 = 'f', 8
53+
double64 = 'd', 9
54+
55+
# Test type inference for primary values
56+
assert_type(DType('f'), DType)
57+
assert_type(DType('d'), DType)
58+
59+
# Test type inference for alias values
60+
assert_type(DType(8), DType)
61+
assert_type(DType(9), DType)
62+
63+
# Test that the enum members have the correct literal types
64+
assert_type(DType.float32, Literal[DType.float32])
65+
assert_type(DType.double64, Literal[DType.double64])

stdlib/enum.pyi

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,8 @@ class Enum(metaclass=EnumMeta):
219219
if sys.version_info >= (3, 12) and sys.version_info < (3, 14):
220220
@classmethod
221221
def __signature__(cls) -> str: ...
222+
if sys.version_info >= (3, 13):
223+
def _add_value_alias_(self, value: Any) -> None: ...
222224

223225
if sys.version_info >= (3, 11):
224226
class ReprEnum(Enum): ...

0 commit comments

Comments
 (0)