@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"
如果有人会帮助我克服这个问题,将会很有帮助。谢谢
答案 0 :(得分:0)
Mypy不知道nested_dataclass
是什么-它似乎不是dataclasses模块的标准部分的装饰器。
因此,当您尝试实例化C时,mypy将无法理解正在发生的特殊逻辑。就mypy而言,C是常规的旧类-且没有构造函数。
您必须采取的两种解决方案:
@dataclass
并删除您正在使用的任何自定义逻辑即可。@nested_dataclass
装饰器的插件。通过查看comes baked into mypy的dataclasses插件,可以得到一些类似的例子。