Python 3.7嵌套数据类mypy类型检查错误

时间:2018-10-16 11:24:38

标签: typechecking python-3.7 mypy python-dataclasses

@dataclass
class A:
    one: int = 0
    two: str = ""


@nested_dataclass
class B:
    three: A
    four: str


@nested_dataclass
class C:
    five: B
    six: str


obj = C(five={"three":{"one": 23, "two":"narf"}, "four": "zort"}, six="fnord")

print(obj.five.three.two)

根据我猜想的功能,此代码是正确的。但是,当我运行mypy src --ignore-missing-imports时,出现以下错误:

run.py:50: error: Unexpected keyword argument "five" for "C"
run.py:50: error: Unexpected keyword argument "six" for "C"

如果有人会帮助我克服这个问题,将会很有帮助。谢谢

1 个答案:

答案 0 :(得分:0)

Mypy不知道nested_dataclass是什么-它似乎不是dataclasses模块的标准部分的装饰器。

因此,当您尝试实例化C时,mypy将无法理解正在发生的特殊逻辑。就mypy而言,C是常规的旧类-且没有构造函数。

您必须采取的两种解决方案:

  1. 只需使用@dataclass并删除您正在使用的任何自定义逻辑即可。
  2. 为mypy编写一个可以理解@nested_dataclass装饰器的插件。通过查看comes baked into mypy的dataclasses插件,可以得到一些类似的例子。