在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似乎是我想要的一个很好的替代方案。通过编写更多的代码来注释批处理的类型,我可以得到密钥的完成建议。你介意回答这个问题吗?这似乎是一个很好的替代方案