编辑:Type [X]确实向类本身键入了提示。现在,REPL也有一个示例。 PyCharm只是不使用类中的 init 信息在其他地方键入提示初始化。如果有人知道为什么会这样,我会接受的。下面的问题现在仅用于上下文:
假设我有以下代码:
from typing import NamedTuple, Type
class SubTuple(NamedTuple):
a: str
b: int
def get_tuple_type() -> Type[SubTuple]:
return SubTuple
test_tuple = get_tuple_type()
test_tuple_instance = test_tuple('test', 1)
有没有一种方法可以键入提示,以便PyCharm可以给我提供参数提示?现在,它给了我这个:
这是毫无用处的。有趣的是,它确实知道参数,因为当我键入:
test_tuple.
它推荐SubTuple中的所有字段。当我创建事物的实例时,它只是不会推荐给我。
谢谢
此外,https://repl.it/repls/BurdensomeInnocentKnowledge只是为了使您可以看到上面的代码确实起作用。 repl IDE也不知道该怎么做,建议我在类本身上调用.a和.b,这使我相信这可能只是我要尝试做的一个普遍问题。在Python中?
编辑:我正在使用Python 3.7;更新了代码以包含我尝试过的内容。结果相同。也会更新repl。
答案 0 :(得分:1)
这是 PyCharm 的静态类型检查器中的一个错误,有一些关于 NamedTuple
on JetBrains bugtracker 的未解决的错误。 NamedTuple
数据类型的最新线程是 PY-18246。修复程序已在 2020 年推出,但尚未报告或解决此在 typing a class object 之后正确推断 NamedTuple
成员的特定案例。
警告也发生了变化,如果您在 PyCharm 2020.3.3 Pro 上尝试相同的代码,您会得到不同的提示。
我尝试使用 Mypy 检查代码,它运行正常,没有任何警告。如果您尝试通过更改类型来导致错误:
variable = test_tuple(1, 'test')
Mypy 警告并正确提示您:
error: Argument 1 to "SubTuple" has incompatible type "int"; expected "str"
error: Argument 2 to "SubTuple" has incompatible type "str"; expected "int"
Found 2 errors in 1 file (checked 1 source file)
<块引用>
有没有办法输入提示以便 PyCharm 给我参数提示?
您已经按照 PEP 484 的建议正确键入了提示。如果您使用 Mypy 静态类型检查器,它可以工作,至于 PyCharm,则需要等待错误修复。您的类型提示没有任何问题,在这种情况下不应更改。