Skip to content

Enums: false-positive "No base classes allowed after ReprEnum" error #12787

Closed
@AlexWaygood

Description

@AlexWaygood

Bug Report

Minimal repro on 3.11 (playground link):

from enum import ReprEnum, Flag
class MyFlag(ReprEnum, Flag): ...

Minimal repro on <=3.10 (playground link):

from enum import Enum, Flag
class ReprEnum(Enum): ...
class MyFlag(ReprEnum, Flag): ...

mypy output for both (with small line-number differences):

main.py:4: error: No base classes are allowed after "__main__.ReprEnum"  [misc]

Expected Behavior

No error should be reported. This use of multiple inheritance works fine at runtime on 3.10 and 3.11. In fact, in 3.11, the source code for the enum module in the stdlib uses exactly this inheritance structure:

class ReprEnum(Enum):
    """
    Only changes the repr(), leaving str() and format() to the mixed-in type.
    """

# Much further down...

class IntFlag(int, ReprEnum, Flag, boundary=EJECT):
    """
    Support for integer-based Flags
    """

Your Environment

I can reproduce this bug on mypy 0.940+ (0.940 was the first released version with @sobolevn's #12026, which introduced this error message).

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugmypy got something wrongfalse-positivemypy gave an error on correct codetopic-enumtopic-inheritanceInheritance and incompatible overrides

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions