在Python中为dict条目键入提示和自动完成
我有以下批定义在Python中为dict条目键入提示和自动完成,python,autocomplete,static-analysis,type-hinting,Python,Autocomplete,Static Analysis,Type Hinting,我有以下批定义 batch={ “id”:id, “输入”:[text,text_lens], “目标”:{ “dp”:{ “头”:头和目标, “deprels”:deprels\u目标 }, “fgpos”:目标 }, “面具”:面具, “pred_掩码”:pred_掩码 } 是否可以在Python中创建dict并公开字段,以便在IDE中看到类型提示和自动完成 例如,理想情况下,我希望能够写: 批处理。 并获得以下自动完成选项:id,input,target,mask,pred\u mas
batch={
“id”:id,
“输入”:[text,text_lens],
“目标”:{
“dp”:{
“头”:头和目标,
“deprels”:deprels\u目标
},
“fgpos”:目标
},
“面具”:面具,
“pred_掩码”:pred_掩码
}
是否可以在Python中创建dict并公开字段,以便在IDE中看到类型提示和自动完成
例如,理想情况下,我希望能够写:
批处理。
并获得以下自动完成选项:id
,input
,target
,mask
,pred\u mask
,以及它们可能具有的任何类型提示。此外,我还希望访问这样一个字段:
batch.target
如果我写
batch.target。
我还将获得自动完成并键入heads
和deprels
的提示
请注意,这些批次永远不会被修改。我假设在编写批处理定义时,必须创建一个Python类,并且必须设置适当的字段,以便对静态分析可见
我所描述的是可能的还是一个好的实践?最近开始支持从IDE添加带有建议的类型提示。即使有支持,我怀疑您是否能够实现字典变量的自动完成
字典的问题是键和值可以是任何类型,即使您注释dict[str,Union[int,str,float]
,并且只能实现类型注释,而不能实现自动完成部分
使用<<代码> ./COD>点标记实现相同的功能,您考虑使用。然后IDE和类型提示将按预期工作。
下面是一个使用Python3.9进行键入的示例代码。如果您使用的是3.8或更低版本,则可以使用typing.List
实现相同的行为
from dataclasses import dataclass
@dataclass
class Position:
x1: int
y1: int
x2: int
y2: int
@dataclass
class Target:
fgpos: Position
@dataclass
class DPTarget:
heads: list[Position]
deprels: list[Position]
Mask = Position
@dataclass
class Batch:
id: list[int]
input: list[str]
target: Target
mask: Mask
pred_mask: Mask
不太可能。绝对不是很好的做法。看看json模式……看看PEP589 TypedDict似乎是我想要的一个很好的替代方案。通过编写更多的代码来注释批处理的类型,我可以得到密钥的完成建议。你介意回答这个问题吗?这似乎是一个很好的替代方案