You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Fix false-positive error on multiple enum base classes (#12963)
Fixes#12787.
Mypy currently emits a false-positive error for this snippet of code, even though it works fine at runtime (and this exact inheritance structure is used in enum.py in the stdlib):
```
from enum import Enum, Flag
class ReprEnum(Enum): ...
class MyFlag(ReprEnum, Flag): ...
```
This PR fixes that.
Copy file name to clipboardExpand all lines: test-data/unit/check-enum.test
+27-7
Original file line number
Diff line number
Diff line change
@@ -1903,6 +1903,14 @@ class Third:
1903
1903
class Mixin:
1904
1904
pass
1905
1905
1906
+
class EnumWithCustomNew(enum.Enum):
1907
+
def __new__(cls, val):
1908
+
pass
1909
+
1910
+
class SecondEnumWithCustomNew(enum.Enum):
1911
+
def __new__(cls, val):
1912
+
pass
1913
+
1906
1914
# Correct Enums:
1907
1915
1908
1916
class Correct0(enum.Enum):
@@ -1920,6 +1928,9 @@ class Correct3(Mixin, enum.Enum):
1920
1928
class RegularClass(Mixin, First, Second):
1921
1929
pass
1922
1930
1931
+
class Correct5(enum.Enum):
1932
+
pass
1933
+
1923
1934
# Correct inheritance:
1924
1935
1925
1936
class _InheritingDataAndMixin(Correct1):
@@ -1934,42 +1945,51 @@ class _CorrectWithDataAndMixin(Mixin, First, Correct0):
1934
1945
class _CorrectWithMixin(Mixin, Correct2):
1935
1946
pass
1936
1947
1948
+
class _CorrectMultipleEnumBases(Correct0, Correct5):
1949
+
pass
1950
+
1951
+
class _MultipleEnumBasesAndMixin(int, Correct0, enum.Flag):
1952
+
pass
1953
+
1954
+
class _MultipleEnumBasesWithCustomNew(int, EnumWithCustomNew, SecondEnumWithCustomNew):
1955
+
pass
1956
+
1937
1957
# Wrong Enums:
1938
1958
1939
1959
class TwoDataTypesViaInheritance(Second, Correct2): # E: Only a single data type mixin is allowed for Enum subtypes, found extra "__main__.Correct2"
1940
1960
pass
1941
1961
1942
-
class TwoDataTypesViaInheritanceAndMixin(Second, Correct2, Mixin): # E: No base classes are allowed after "__main__.Correct2" \
1962
+
class TwoDataTypesViaInheritanceAndMixin(Second, Correct2, Mixin): # E: No non-enum mixin classes are allowed after "__main__.Correct2" \
1943
1963
# E: Only a single data type mixin is allowed for Enum subtypes, found extra "__main__.Correct2"
1944
1964
pass
1945
1965
1946
-
class MixinAfterEnum1(enum.Enum, Mixin): # E: No base classes are allowed after "enum.Enum"
1966
+
class MixinAfterEnum1(enum.Enum, Mixin): # E: No non-enum mixin classes are allowed after "enum.Enum"
1947
1967
pass
1948
1968
1949
-
class MixinAfterEnum2(First, enum.Enum, Mixin): # E: No base classes are allowed after "enum.Enum"
1969
+
class MixinAfterEnum2(First, enum.Enum, Mixin): # E: No non-enum mixin classes are allowed after "enum.Enum"
1950
1970
pass
1951
1971
1952
1972
class TwoDataTypes(First, Second, enum.Enum): # E: Only a single data type mixin is allowed for Enum subtypes, found extra "__main__.Second"
1953
1973
pass
1954
1974
1955
-
class TwoDataTypesAndIntEnumMixin(First, Second, enum.IntEnum, Mixin): # E: No base classes are allowed after "enum.IntEnum" \
1975
+
class TwoDataTypesAndIntEnumMixin(First, Second, enum.IntEnum, Mixin): # E: No non-enum mixin classes are allowed after "enum.IntEnum" \
1956
1976
# E: Only a single data type mixin is allowed for Enum subtypes, found extra "__main__.Second"
1957
1977
pass
1958
1978
1959
1979
class ThreeDataTypes(First, Second, Third, enum.Enum): # E: Only a single data type mixin is allowed for Enum subtypes, found extra "__main__.Second" \
1960
1980
# E: Only a single data type mixin is allowed for Enum subtypes, found extra "__main__.Third"
1961
1981
pass
1962
1982
1963
-
class ThreeDataTypesAndMixin(First, Second, Third, enum.Enum, Mixin): # E: No base classes are allowed after "enum.Enum" \
1983
+
class ThreeDataTypesAndMixin(First, Second, Third, enum.Enum, Mixin): # E: No non-enum mixin classes are allowed after "enum.Enum" \
1964
1984
# E: Only a single data type mixin is allowed for Enum subtypes, found extra "__main__.Second" \
1965
1985
# E: Only a single data type mixin is allowed for Enum subtypes, found extra "__main__.Third"
1966
1986
pass
1967
1987
1968
-
class FromEnumAndOther1(Correct2, Second, enum.Enum): # E: No base classes are allowed after "__main__.Correct2" \
1988
+
class FromEnumAndOther1(Correct2, Second, enum.Enum): # E: No non-enum mixin classes are allowed after "__main__.Correct2" \
1969
1989
# E: Only a single data type mixin is allowed for Enum subtypes, found extra "__main__.Second"
1970
1990
pass
1971
1991
1972
-
class FromEnumAndOther2(Correct2, Second): # E: No base classes are allowed after "__main__.Correct2" \
1992
+
class FromEnumAndOther2(Correct2, Second): # E: No non-enum mixin classes are allowed after "__main__.Correct2" \
1973
1993
# E: Only a single data type mixin is allowed for Enum subtypes, found extra "__main__.Second"
0 commit comments