@@ -56,7 +56,7 @@ class Truth(Enum):
56
56
x = ''
57
57
x = Truth.true.name
58
58
reveal_type(Truth.true.name) # N: Revealed type is "Literal['true']?"
59
- reveal_type(Truth.false.value) # N: Revealed type is "builtins.bool "
59
+ reveal_type(Truth.false.value) # N: Revealed type is "Literal[False]? "
60
60
[builtins fixtures/bool.pyi]
61
61
62
62
[case testEnumValueExtended]
@@ -66,7 +66,7 @@ class Truth(Enum):
66
66
false = False
67
67
68
68
def infer_truth(truth: Truth) -> None:
69
- reveal_type(truth.value) # N: Revealed type is "builtins.bool "
69
+ reveal_type(truth.value) # N: Revealed type is "Union[Literal[True]?, Literal[False]?] "
70
70
[builtins fixtures/bool.pyi]
71
71
72
72
[case testEnumValueAllAuto]
@@ -90,7 +90,7 @@ def infer_truth(truth: Truth) -> None:
90
90
[builtins fixtures/primitives.pyi]
91
91
92
92
[case testEnumValueExtraMethods]
93
- from enum import Enum, auto
93
+ from enum import Enum
94
94
class Truth(Enum):
95
95
true = True
96
96
false = False
@@ -99,7 +99,7 @@ class Truth(Enum):
99
99
return 'bar'
100
100
101
101
def infer_truth(truth: Truth) -> None:
102
- reveal_type(truth.value) # N: Revealed type is "builtins.bool "
102
+ reveal_type(truth.value) # N: Revealed type is "Union[Literal[True]?, Literal[False]?] "
103
103
[builtins fixtures/bool.pyi]
104
104
105
105
[case testEnumValueCustomAuto]
@@ -129,6 +129,20 @@ def cannot_infer_truth(truth: Truth) -> None:
129
129
reveal_type(truth.value) # N: Revealed type is "Any"
130
130
[builtins fixtures/bool.pyi]
131
131
132
+ [case testEnumValueSameType]
133
+ from enum import Enum
134
+
135
+ def newbool() -> bool:
136
+ ...
137
+
138
+ class Truth(Enum):
139
+ true = newbool()
140
+ false = newbool()
141
+
142
+ def infer_truth(truth: Truth) -> None:
143
+ reveal_type(truth.value) # N: Revealed type is "builtins.bool"
144
+ [builtins fixtures/bool.pyi]
145
+
132
146
[case testEnumUnique]
133
147
import enum
134
148
@enum.unique
@@ -1362,6 +1376,25 @@ class E(IntEnum):
1362
1376
reveal_type(E.A.value) # N: Revealed type is "__main__.N"
1363
1377
1364
1378
1379
+ [case testEnumFinalValues]
1380
+ from enum import Enum
1381
+ class Medal(Enum):
1382
+ gold = 1
1383
+ silver = 2
1384
+
1385
+ # Another value:
1386
+ Medal.gold = 0 # E: Cannot assign to final attribute "gold"
1387
+ # Same value:
1388
+ Medal.silver = 2 # E: Cannot assign to final attribute "silver"
1389
+
1390
+
1391
+ [case testEnumFinalValuesCannotRedefineValueProp]
1392
+ from enum import Enum
1393
+ class Types(Enum):
1394
+ key = 0
1395
+ value = 1 # E: Cannot override writable attribute "value" with a final one
1396
+
1397
+
1365
1398
[case testEnumReusedKeys]
1366
1399
# https://github.com/python/mypy/issues/11248
1367
1400
from enum import Enum
@@ -1405,13 +1438,13 @@ class NonEmptyIntFlag(IntFlag):
1405
1438
x = 1
1406
1439
1407
1440
class ErrorEnumWithValue(NonEmptyEnum): # E: Cannot inherit from final class "NonEmptyEnum"
1408
- x = 1
1441
+ x = 1 # E: Cannot override final attribute "x" (previously declared in base class "NonEmptyEnum")
1409
1442
class ErrorIntEnumWithValue(NonEmptyIntEnum): # E: Cannot inherit from final class "NonEmptyIntEnum"
1410
- x = 1
1443
+ x = 1 # E: Cannot override final attribute "x" (previously declared in base class "NonEmptyIntEnum")
1411
1444
class ErrorFlagWithValue(NonEmptyFlag): # E: Cannot inherit from final class "NonEmptyFlag"
1412
- x = 1
1445
+ x = 1 # E: Cannot override final attribute "x" (previously declared in base class "NonEmptyFlag")
1413
1446
class ErrorIntFlagWithValue(NonEmptyIntFlag): # E: Cannot inherit from final class "NonEmptyIntFlag"
1414
- x = 1
1447
+ x = 1 # E: Cannot override final attribute "x" (previously declared in base class "NonEmptyIntFlag")
1415
1448
1416
1449
class ErrorEnumWithoutValue(NonEmptyEnum): # E: Cannot inherit from final class "NonEmptyEnum"
1417
1450
pass
0 commit comments