gpt4 book ai didi

python - mypy 提示 attrs 类中的 TypedDict 具有不兼容的类型

转载 作者:行者123 更新时间:2023-12-02 23:50:11 27 4
gpt4 key购买 nike

我在 attrs 数据类 Example 中有一个 TypedDict DictWithOnlyX,其中 mypy 提示从 my 的 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 提示错误:返回值类型不兼容(得到“DictWithOnlyX”,预期为“DictWithOnlyX”)

具有讽刺意味的是,当通过声明 attrib() 的类型来解决 mypy 问题时,我得到了另一个 mypy 错误 - 打地鼠!

@attrs
class Example(object):
name: str = attrib(default="")
dx: DictWithOnlyX = attrib(factory=DictWithOnlyX) # <-- mypy compains

def getdict(self) -> DictWithOnlyX:
return self.dx

mypy 提示错误:赋值中的类型不兼容(表达式的类型为“DictWithOnlyX”,变量的类型为“DictWithOnlyX”)

上述代码的两个版本都可以运行。 Python 3.7.5。

这两条错误消息都很神秘,因为它们似乎是自相矛盾的 - (据报道)相同的类型怎么会“不兼容”?

最佳答案

对我来说这看起来像是一个 mypy bug。但我很惊讶它竟然能这么好,因为你完全回避了 attrs 的打字支持!定义类的惯用方法是

@attrs(auto_attribs=True)
class Example(object):
name: str = ""
dx: DictWithOnlyX = Factory(DictWithOnlyX)

但这会导致相同的错误消息。

关于python - mypy 提示 attrs 类中的 TypedDict 具有不兼容的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59597187/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com