Bug Report
When iterating over a list[type[A]] in a comprehension with if issubclass(cls, M) where A and M are dataclasses, mypy is unable to narrow the type of cls to type[M].
To Reproduce
from dataclasses import dataclass
@dataclass
class A:
pass
@dataclass
class M:
pass
@dataclass
class B(A):
pass
@dataclass
class C(M, A):
pass
alist: list[type[A]] = [B, C]
mlist: list[type[M]] = [cls for cls in alist
if issubclass(cls, M)]
Expected Behavior
Typechecks.
Actual Behavior
error: List comprehension has incompatible type List[type[A]]; expected List[type[M]] [misc]
Found 1 error in 1 file (checked 1 source file)
Notes
This error DOES NOT occur if the classes are not dataclasses.
This error DOES NOT occur in a regular for loop:
mlist: list[type[M]] = []
cls: type[A]
for cls in alist:
if issubclass(cls, M):
mlist.append(cls)
This error DOES still occur if issubclass() is wrapped in a TypeIs guard function:
def is_m(t: type) -> TypeIs[type[M]]:
return issubclass(t, M)
alist: list[type[A]] = [B, C]
mlist: list[type[M]] = [cls for cls in alist
if is_m(cls)]
Your Environment
- Mypy version used: mypy 2.1.0 (compiled: no)
- Mypy command-line flags: none
- Mypy configuration options from
mypy.ini (and other config files): nothing special
- Python version used: 3.13.13
Bug Report
When iterating over a
list[type[A]]in a comprehension withif issubclass(cls, M)where A and M are dataclasses, mypy is unable to narrow the type of cls totype[M].To Reproduce
Expected Behavior
Typechecks.
Actual Behavior
error: List comprehension has incompatible type List[type[A]]; expected List[type[M]] [misc]
Found 1 error in 1 file (checked 1 source file)
Notes
This error DOES NOT occur if the classes are not dataclasses.
This error DOES NOT occur in a regular for loop:
This error DOES still occur if
issubclass()is wrapped in a TypeIs guard function:Your Environment
mypy.ini(and other config files): nothing special