Skip to content

too many data types false negative in Enum #12262

Closed
@sobolevn

Description

@sobolevn
import enum

class First:
    def __new__(cls, val):
        pass

class Second:
    def __new__(cls, val):
        pass

class Correct(First, enum.Enum):
    pass

class Wrong(Second, Correct):
    pass

This code does not produce any mypy warnings, but after #12026 it should.

Runtime raises:

Traceback (most recent call last):
  File "/Users/sobolev/Desktop/mypy/out/ex.py", line 14, in <module>
    class Wrong(Second, Correct):
  File "/Users/sobolev/.pyenv/versions/3.10.0/lib/python3.10/enum.py", line 172, in __prepare__
    member_type, first_enum = metacls._get_mixins_(cls, bases)
  File "/Users/sobolev/.pyenv/versions/3.10.0/lib/python3.10/enum.py", line 613, in _get_mixins_
    member_type = _find_data_type(bases) or object
  File "/Users/sobolev/.pyenv/versions/3.10.0/lib/python3.10/enum.py", line 601, in _find_data_type
    raise TypeError('%r: too many data types: %r' % (class_name, data_types))
TypeError: 'Wrong': too many data types: [<class '__main__.Second'>, <class '__main__.First'>]

PR is in the works.

Metadata

Metadata

Assignees

Labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions