我希望对某些字典执行静态类型检查( pylance
in )。vscode
“棘手”部分是我希望某些参数是可选的,并且根本不显示在字典中。我试过使用dataclasses
,TypedDict
但到目前为止没有运气。
from typing import Optional, List
from dataclasses import dataclass, asdict
@dataclass
class SubOrder:
name: str
@dataclass
class Order:
name: str
sub_orders: Optional[List[SubOrder]]
assert asdict(Order(name="Pizza")) == {"name": "Pizza"}
assert asdict(Order(name="Pizza", sub_orders=[SubOrder(name="Pasta")])) == {
"name": "Pizza",
"sub_orders": [{"name": "Pasta"}],
}
这可以实现dataclasses
吗?我基本上只希望我的静态类型检查器 ( pylance
/ pyright
) 来检查我的字典,这就是我使用dataclasses
. 我也尝试过,TypedDict
但类型检查器的行为似乎不像我。他们总是要求我设置sub_orders
。
以下代码通过但pylance
不满意没有sub_orders
.
from typing import Optional, List, TypedDict
class SubOrder(TypedDict):
name: str
class Order(TypedDict):
name: str
sub_orders: Optional[List[SubOrder]]
assert Order(name="Pizza") == {"name": "Pizza"}
assert Order(name="Pizza", sub_orders=[SubOrder(name="Pasta")]) == {
"name": "Pizza",
"sub_orders": [{"name": "Pasta"}],
}
编辑
我已经添加了一个错误报告,pylance
因为这实际上可能是pylance
/pyright