0
@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"

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

4

1 回答 1

0

Mypy 不知道 anested_dataclass是什么——它似乎不是作为 dataclasses 模块的标准部分的装饰器。

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

您拥有的两种可能的解决方案是:

  1. 只需使用@dataclass并删除您正在使用的任何自定义逻辑。
  2. 为mypy编写一个可以理解@nested_dataclass装饰器的插件。您可以通过查看mypy 中的数据类插件来获得一些示例。
于 2018-10-16T14:44:02.817 回答