【问题标题】:Python 3.7 nested dataclass mypy type check errorPython 3.7 嵌套数据类 mypy 类型检查错误
【发布时间】:2019-03-20 22:09:26
【问题描述】:
@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"

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

【问题讨论】:

    标签: typechecking python-3.7 mypy python-dataclasses


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-04-18
      • 2021-11-29
      • 2016-04-17
      • 1970-01-01
      • 2022-10-13
      • 2023-03-14
      • 2021-11-25
      • 2017-11-16
      相关资源
      最近更新 更多