Python 3中如何为特定字典类型添加类型提示并允许空字典?
解决PyCharm中自定义类型与空字典的类型不匹配警告
你用NewType定义的MyDataType是名义类型,它和底层的嵌套字典类型在类型检查眼里是完全不同的东西——哪怕空字典的结构符合这个嵌套字典的要求,PyCharm也会把它当成普通dict,而不是你定义的MyDataType,所以会报类型不匹配。
下面是两种可行的解决方法:
方法1:用类型别名代替NewType
如果不需要严格区分名义类型,只是想给复杂的嵌套字典起个好记的名字,直接用类型别名就行。类型别名属于结构类型,只要字典的结构符合要求(包括空字典),类型检查就会通过:
from typing import Dict # 直接用类型别名替代NewType MyDataType = Dict[str, Dict[str, Dict[str, Dict[str, float]]]] class App: def __init__(self, name: str, data: MyDataType): self.name = name self.data = data app = App("app_1", data={}) # 无类型警告
方法2:保留NewType,显式转换空字典
如果必须用NewType来在类型层面和普通dict划清界限,那就把空字典显式转换成MyDataType类型:
from typing import NewType MyDataType = NewType("MyDataType", dict[str, dict[str, dict[str, dict[str, float]]]]) class App: def __init__(self, name: str, data: MyDataType): self.name = name self.data = data # 用MyDataType包裹空字典完成类型转换 app = App("app_1", data=MyDataType({})) # 类型匹配,无警告
内容的提问来源于stack exchange,提问作者aura
相关产品推荐
相关产品推荐

