我怎样才能在.pyi文件中声明原始模块中的部分字段?

时间:2017-04-01 00:01:35

标签: python python-3.x pycharm stub

它在PyCharm 2016中有效,但它在2017年的PyCharm中没有: enter image description here

"溶液": PyCharm 2017.2.x支持来自NamedTuple的{​​{1}},我不再需要使用typing文件了。

1 个答案:

答案 0 :(得分:2)

编辑#1:

我发现了这个问题:https://youtrack.jetbrains.com/issue/PY-18597并且有一个答案:

  

PyCharm 2017.1 EAP版本现在总是比Python路径上的Python文件更喜欢存根文件。

意味着如果存在这样的文件,Pycharm将查找.pyi文件中存在的内容,并且它将仅使用 作为参考。因此,您没有其他选择,只能在.pyi文件中声明所有功能。

您可以在here

中找到有关如何避免可能令人讨厌的警告和错误的一些知识

编辑#2:

是的我可以确认from ... import *在PyCharm中没有按预期工作,这可能是一个错误,您可以打开一个问题(或者如果有人成功完成这项工作,请告诉我们如何)!

我找到了一个基于这句话的解决方法:

  

导入到存根中的模块和变量不会被视为从存根中导出,除非导入使用import ... as ...表单或等同于... import ... as ...表单。

如果您:from file_a import a as a, b as b ...,那么所有内容都会按预期取消标记,但在from file_a ...会给您以下警告:

Import resolves to its containing file... (Ctrl+F1) 
This inspection detects names that should resolve but don't. Due to dynamic dispatch and duck typing, this is possible in a limited but useful number of cases. Top-level and class-level items are supported better than instance items.

不要惊慌,正如here所解释的那样,这是一个关于模块名称可能被文件名遮蔽的警告(在您的情况下不适用!)