python - PyCharm 中的部分 stub

标签 python pycharm python-3.6 pep pyi

我想在我的项目中引入部分类型注释。例如重载。我发现 pep561 引入了部分 stub 文件支持。

我用 PyCharm 开发我的项目,并添加了相应的 *.pyi文件。并得到了预期的信息,但 PyCharm 报告在 pyi 文件中找不到引用。

当pyi文件中没有条目时,是否可以强制PyCharm查看原始py文件?或者也许它也可以部分进入类?

我创建示例项目来显示问题(原始的太大):
cannot find reference 'CC' in '__init__.pyi'

├── main.py
└── pep561_test
    ├── __init__.py
    └── __init__.pyi

主文件
from pep561_test import AA, BB, CC

AA().test1(1)
AA().test1(True)
AA().test1('a')
AA().test2(1)

BB().test1(1)
BB().test2(1)

__init__.py
class AA:
    def test1(self, a):
        pass

    def test2(self, a):
        pass


class BB:
    def test1(self, a):
        pass

    def test2(self, a):
        pass


class CC:
    def test1(self, a):
        pass

    def test2(self, a):
        pass

__init__.pyi
class AA:
    def test1(self, a: int) -> int: ...

    def test1(self, a: bool) -> str: ...

    def test2(self, a):
        pass


class BB:
    def test1(self, a):
        pass

最佳答案

指示在 .py 中查找缺少的顶级引用 (CC)
根据 PEP 484 ,这是可能的,只需在 .pyi 的顶层添加以下行(我检查了它是否适用于 PyCharm 11.0.7,编辑:在 PyCharm 2020.3 中不起作用):

def __getattr__(name) -> Any: ...
指示在 .py 中查找缺少的属性/方法(BB)
其他库(至少 typeshed )允许类似的语法将不完整的类 stub 与 .py 中的类定义合并。
class Foo:
    def __getattr__(self, name: str) -> Any: ...  # incomplete
    x: int
    y: str
然而,这似乎不是 PEP 484 的一部分,据我所知,它没有在 PyCharm(从 11.0.7 开始)中实现。我刚刚创建了一个 request对于此功能:我在寻找将我不完整的类 stub 与类定义合并的方法时偶然发现了这个 stackoverflow 问题,并得出结论认为它尚不可行。

关于python - PyCharm 中的部分 stub ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55160797/

相关文章:

python - Pylint "unable to import"错误,但与 Pycharm 一起工作正常

python - Python 3.6 中的通用 NamedTuple

python - 从列表中删除相似的项目

PyCharm:在路径中查找:跳过导入语句

javascript - 是否有任何选项可以让我们检查 AJAX 请求的来源

python - 两幅图像的匹配中心(OpenCV,Python)

Python:从 CSV 中删除非数字数据

PyCharm 将控制台输出保存到文件中不起作用

python - 如何更新QWidget的内容?

python - 如何在 MinMaxScaler 中对矩阵中的列使用 inverse_transform