如何输入提示函数,该函数返回已在函数内创建的 NamedTuple

问题描述 投票:0回答:1

我的 IDE (PyCharm) linter 表明我在函数中创建

return
时在
namedtuple
类型提示上犯了错误。问题似乎是我说我将返回类型
NamedTuple
,而实际上我正在返回类型
MyNamedTuple
。我该如何解决这个问题?

示例:

from typing import Dict, NamedTuple

def foo(bar: Dict) -> NamedTuple:
    MyNamedTuple = NamedTuple("MyNamedTuple", [(k, int) for k in bar.keys()])
    d = {k: v for k, v in bar.items()}
    return MyNamedTuple(**d)

>>> foo({"a": 1, "b": 2})
MyNamedTuple(a=1, b=2)

python python-typing namedtuple
1个回答
0
投票

我认为这个问题源于一个轻微的误解:官方文档指出

NamedTuple
是“
namedtuple
的打字版本”。这并不是说
NamedTuple
本身可以用作类型提示。

您定义的

foo
的返回类型实际上是
MyNamedTuple
。逐行分解:

  1. 定义一个名为 MyNamedTuple
    type
    (即类),其字段源自
    bar
    的键。
  2. bar
    复制到
    d
    (此行是多余的)
  3. 返回在(1)中创建的类型的实例
    MyNamedTuple

正如您问题的评论中所建议的,解决方案是将提示注释设置为

"MyNamedTuple"

def foo(bar: Dict) -> "MyNamedTuple":
    MyNamedTuple = NamedTuple("MyNamedTuple", [(k, int) for k in bar.keys()])
    # d = {k: v for k, v in bar.items()}
    return MyNamedTuple(**bar)
© www.soinside.com 2019 - 2024. All rights reserved.