我DictWithOnlyX
在 attrs 数据类中有一个 TypedDict Example
,其中 mypy 抱怨从getdict()
我的类的方法返回的类型,即使声明了返回类型:
from typing_extensions import TypedDict
from attr import attrs, attrib, Factory, fields
DictWithOnlyX = TypedDict('DictWithOnlyX', {"x": str})
@attrs
class Example(object):
name: str = attrib(default="")
dx = attrib(factory=DictWithOnlyX)
def getdict(self) -> DictWithOnlyX:
return self.dx # <-- mypy compains
mypy 抱怨error: Incompatible return value type (got "DictWithOnlyX", expected "DictWithOnlyX")
具有讽刺意味的是,当通过声明的类型来解决 mypy 问题时,attrib()
我得到了另一个 mypy 错误 - 打个痣!
@attrs
class Example(object):
name: str = attrib(default="")
dx: DictWithOnlyX = attrib(factory=DictWithOnlyX) # <-- mypy compains
def getdict(self) -> DictWithOnlyX:
return self.dx
mypy 抱怨error: Incompatible types in assignment (expression has type "DictWithOnlyX", variable has type "DictWithOnlyX")
上述代码的两个版本都运行良好。蟒蛇 3.7.5。
两条错误消息都很神秘,因为它们看起来自相矛盾——(据报道)相同的类型怎么可能是“不兼容的”?