Description
Bug Report
The following was raised at https://stackoverflow.com/questions/68974940/how-to-suppress-index-should-be-a-string-type-error-on-subclassed-python-enum?noredirect=1#comment121902783_68974940
import enum
class MyEnumMeta(enum.EnumMeta):
def __getitem__(self, indexOrSlice):
if isinstance(indexOrSlice, (int, slice)):
return list(self)[indexOrSlice]
else:
return enum.EnumMeta.__getitem__(self, indexOrSlice)
class MyEnum(enum.Enum, metaclass=MyEnumMeta): pass
class Period(MyEnum):
A = "a"
B = "b"
C = "c"
print(Period["A"])
print(Period[1]) # type: ignore[misc]
print(Period[:2]) # type: ignore[misc]
The author of Python enum
(PEP 435) responded that the # type: ignore[misc]
should not be needed in this case because MyEnum
is different from Enum
In other words, in visit_index_with_type
, instead of checking with is_enum
, please check whether the object really is an Enum
(or at least check whether its __getitem__
differs from that of Enum
)
To Reproduce
Apply mypy to the above code without the # type: ignore[misc]
Actual Behavior
mypy reports "Enum index should be a string" and blocks my commit
Your Environment
python 3.7.11
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v0.782
hooks:- id: mypy
args: [--ignore-missing-imports]
- id: mypy
[mypy]
python_version = 3.7
warn_unused_configs = True
no_color_output = True
pretty = True
show_error_codes = True
disallow_subclassing_any = False