Skip to content

Type mismatch error with overlapping enums #15196

@LukasKrocek

Description

@LukasKrocek

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions