Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 键入NamedTuple作为类以在PyCharm中包含参数提示_Python_Python 3.x_Pycharm_Namedtuple_Python Typing - Fatal编程技术网

Python 键入NamedTuple作为类以在PyCharm中包含参数提示

Python 键入NamedTuple作为类以在PyCharm中包含参数提示,python,python-3.x,pycharm,namedtuple,python-typing,Python,Python 3.x,Pycharm,Namedtuple,Python Typing,编辑:Type[X]不向类本身提供类型提示。repl现在也有一个这样的例子。PyCharm只是不使用类中的\uuuu init\uuuu信息在其他地方键入初始化提示。如果有人知道原因,我会接受这个答案。下面的问题仅用于上下文: 假设我有以下代码: 通过键入import NamedTuple,键入 类子元组(命名元组): a:str b:int def get_tuple_type()->type[SubTuple]: 返回子元组 test\u tuple=get\u tuple\u type()

编辑:Type[X]不向类本身提供类型提示。repl现在也有一个这样的例子。PyCharm只是不使用类中的
\uuuu init\uuuu
信息在其他地方键入初始化提示。如果有人知道原因,我会接受这个答案。下面的问题仅用于上下文:

假设我有以下代码:

通过键入import NamedTuple,键入
类子元组(命名元组):
a:str
b:int
def get_tuple_type()->type[SubTuple]:
返回子元组
test\u tuple=get\u tuple\u type()
test\u tuple\u instance=test\u tuple('test',1)
有没有办法键入hint以便PyCharm给我参数提示?现在它给了我这个:

这是相当无用的。有趣的是,它确实知道参数,因为当我键入:

test\u元组。
它推荐
子耦合中的所有字段。当我去创建一个实例时,它不会向我推荐它们

另外,您可以看到上面的代码确实有效。repl IDE也不知道如何处理这件事,建议我在类本身上调用.a和.b,这让我相信这可能只是我在Python中尝试做的事情的一般问题


编辑:我正在使用Python 3.7;更新代码以包含我尝试过的内容。结果是一样的。也将更新repl。

这是PyCharm的静态类型检查器中的一个bug,有一些关于它的开放bug。
NamedTuple
数据类型上最新的线程是。2020年期间已经推出了修复程序,但这一正确推断
NamedTuple
成员的具体案例既没有报告也没有解决

警告也发生了变化,如果您使用PyCharm 2020.3.3 Pro尝试相同的代码,您将得到不同的提示

我试着用Mypy检查代码,它在没有任何警告的情况下正常工作。如果试图通过更改类型导致错误:

variable=test\u元组(1,“test”)
警告并正确提示您:

错误:“SubTuple”的参数1具有不兼容的类型“int”;预期的“str”
错误:“SubTuple”的参数2具有不兼容的类型“str”;应为“int”
在1个文件中发现2个错误(选中1个源文件)
有没有办法键入hint以便PyCharm给我参数提示


您已经按照PEP 484的建议正确输入提示。如果您使用Mypy静态类型检查器,它就可以工作,对于PyCharm来说,只需等待bug修复。您的类型提示没有问题,在本例中不应更改。

[python]
标记中看到了这一点,因此无论如何都不是PyCharm专家。但是,您可以尝试将函数返回签名定义为:
def get\u tuple\u type()->SubTuple:
。当您执行
a:str
时,您定义了类变量签名。如果您定义函数return sig,PyCharm可能会起作用。
get\u tuple\u type
是否总是返回相同的类?@FelipeFaria谢谢,您提醒我,我没有包括我已经尝试过的内容
->SubTuple
使它期望一个实例。我尝试了
类型[SubTuple]
,我认为这只会使它期望一个子类的实例,但不是正的。那么为什么需要这个函数呢?只需使用
SubTuple
@IainShelvington:根据StackOverflow的指导原则,我提供了一个最小可行的示例。这是我实际代码中的一个子问题。不过,我会尝试一下dataclass