-
-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Open
Labels
Description
Bug Report
Enum is casted to literal when asserting its value, even when it is declared as attr of class that can be mutated after assertion
To Reproduce
from enum import Enum
class MyEnum(Enum):
A = 1
B = 2
class A:
def __init__(self, enum: MyEnum):
self.enum = enum
def change(self) -> None:
self.enum = MyEnum.B
if __name__ == "__main__":
a = A(MyEnum.A)
assert a.enum == MyEnum.A
a.change()
assert a.enum == MyEnum.B Expected Behavior
No error
Actual Behavior
Non-overlapping equality check (left operand type: "Literal[MyEnum.A]", right operand type: "Literal[MyEnum.B]")
Your Environment
- Mypy version used: current master
- Mypy command-line flags: --strict
- Python version used: 3.10
tk-ematiq, bachya and sliedes