Python 键入NamedTuple作为类以在PyCharm中包含参数提示
编辑:Type[X]不向类本身提供类型提示。repl现在也有一个这样的例子。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()
\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