【问题标题】:Type hints and autocomplete for dict entries in PythonPython 中 dict 条目的类型提示和自动完成
【发布时间】:2021-08-03 11:32:47
【问题描述】:

我有以下批次定义

batch = {
            'id': ids,
            'input': [texts, text_lens],
            'target': {
                'dp' : {
                    'heads': heads_target,
                    'deprels': deprels_target
                },
                'fgpos' : target
            },
            'mask': mask,
            'pred_mask' : pred_mask
        }

是否可以在 Python 中创建一个 dict 并公开字段,以便在我的 IDE 中我可以看到类型提示和自动完成?

例如,理想情况下我希望能够写:

batch.

并获得以下自动完成选项:idinputtargetmaskpred_mask 以及它们可能具有的任何类型提示。我也理想地想要访问这样的字段:

batch.target

如果我写

batch.target.

我还将获得headsdeprels 的自动完成和键入提示。

请注意,这些批次永远不会被修改。我假设在编写批处理定义时,必须创建一个 Python 类并设置适当的字段才能对静态分析可见。

我所描述的是否可行并且是一种好的做法?

【问题讨论】:

  • 不可能。绝对不是好习惯。看看 json 架构...
  • TypedDict 似乎是我想要的一个不错的选择。通过编写更多的额外代码来注释批处理的类型,我可以获得键的完成建议。你介意回答这个问题吗?这似乎是一个不错的选择

标签: python autocomplete static-analysis type-hinting


【解决方案1】:

最近PyCharm 开始支持从 IDE 添加类型提示和建议。即使有支持,我怀疑您能否实现字典变量的自动完成。

字典的问题是 keysvalues 可以是任何类型,即使您注释 dict[str, Union[int, str, float] 并且 typeddict 只能实现类型注释而不是自动完成部分。

要使用. 点符号实现相同的功能,您可以考虑使用dataclasses。然后 IDE 和类型提示将按预期工作。

这是一个使用 python 3.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

【讨论】:

    猜你喜欢
    • 2011-02-27
    • 2018-02-20
    • 2019-03-17
    • 1970-01-01
    • 2016-08-17
    • 2015-09-12
    • 2013-11-05
    • 2019-03-08
    • 1970-01-01
    相关资源
    最近更新 更多