Closed
Description
Bug Report
The following code uses Generic with Protocol for dataclass. It passes with mypy 0.950, but fails with 0.960.
from dataclasses import dataclass
from typing import Protocol, Dict, TypeVar, Generic
class DataclassProtocol(Protocol):
__dataclass_fields__: Dict
T = TypeVar("T", bound=DataclassProtocol)
@dataclass
class MyDataclass:
x: int = 1
class MyGeneric(Generic[T]):
...
class MyClass(MyGeneric[MyDataclass]):
...
Error messge:
error: Type argument "MyDataclass" of "MyGeneric" must be a subtype of "DataclassProtocol"
Your Environment
- Mypy version used: 0.960
- Mypy command-line flags: no flag
- Mypy configuration options from
mypy.ini
(and other config files): no config - Python version used: 3.10
- Operating system and version: Ubuntu 20.04
(Edit)
Using typing.ClassVar
fixes this.
from dataclasses import Field
from typing import Protocol, ClassVar, Dict
class DataclassProtocol(Protocol):
__dataclass_fields__: ClassVar[Dict[str, Field]]