Closed
Description
Right now this code does not produce any issues in mypy:
import enum
class First:
def __new__(cls, val):
return 1
class Second:
def __new__(cls, val):
return 2
class Some(First, Second, enum.Enum): # ok
x = 1
But, in runtime it fails:
>>> import enum
>>>
>>> class First:
... def __new__(cls, val):
... return 1
...
>>> class Second:
... def __new__(cls, val):
... return 2
...
>>> class Some(First, Second, enum.Enum):
... x = 1
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/sobolev/Desktop/cpython/Lib/enum.py", line 403, in __prepare__
member_type, first_enum = metacls._get_mixins_(cls, bases)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/sobolev/Desktop/cpython/Lib/enum.py", line 893, in _get_mixins_
member_type = _find_data_type(bases) or object
^^^^^^^^^^^^^^^^^^^^^^
File "/Users/sobolev/Desktop/cpython/Lib/enum.py", line 881, in _find_data_type
raise TypeError('%r: too many data types: %r' % (class_name, data_types))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: 'Some': too many data types: {<class '__main__.Second'>, <class '__main__.First'>}
This happens because Enum
can have only one extra subclass with __new__
, because it is used to create new Enum
members.