【发布时间】:2021-12-18 05:10:27
【问题描述】:
在 Python 3.9 中对通用 dataclass 和 Protocol 进行类型检查时,我收到一个我不理解的错误。
mypy 示例.py
example.py:21:错误:参数“a”到“Y”的类型“int”不兼容;预期“可选[T]”
mypy 似乎由于数据类实现的某些方面而感到困惑。
我的代码是正确的,还是存在细微的问题?我能做些什么来帮助 mypy 理解它吗?
此代码在类型检查时会产生错误:
from dataclasses import dataclass
from typing import Generic, Optional, Protocol, TypeVar
T = TypeVar("T")
class Xp(Protocol[T]):
a: Optional[T]
@dataclass
class X(Generic[T]):
a: Optional[T] = None
@dataclass
class Y(X[int]):
pass
y: Xp[int] = Y(a=0)
这个没有数据类的等效代码不会产生错误:
from dataclasses import dataclass
from typing import Generic, Optional, Protocol, TypeVar
T = TypeVar("T")
class Xp(Protocol[T]):
a: Optional[T]
class X(Generic[T]):
def __init__(self, a: Optional[T] = None) -> None:
super().__init__()
self.a = a
class Y(X[int]):
pass
y: Xp[int] = Y(a=0)
【问题讨论】:
标签: python generics mypy python-dataclasses