我想知道如何将类型提示(用于 PyCharm IDE 代码完成支持)添加到def links(self) -> List[str]我通过猴子修补到现有模块的类的方法:
def issue_links(self) -> List[str]:
links = []
# ...
return links
Run Code Online (Sandbox Code Playgroud)
Issuepython-jira 类from jira.resources import Issue
# {...} my defined function code is somewhere here
Issue.links = issue_links
Run Code Online (Sandbox Code Playgroud)
现在我遇到的问题是,当我在Issue对象上调用该方法时,PyCharm 显然无法识别该方法。我尝试遵循PEP 484 存根文件并使用文件typing中的模块.pyi来让 IDE 找到我的猴子修补函数的定义。
from typing import List
class Issue:
def links(self) -> List[str]: ...
Run Code Online (Sandbox Code Playgroud)
然而,这是行不通的。我的假设是文件结构在某种程度上不正确:
jira-python module>> 站点包(使用pip install jira)下载
myFile.py …
我是 Python 注释的新手(类型提示)。我注意到文件中的许多类定义pyi都继承了Generic[_T], 和_T = TypeVar('_T').
我很困惑,_T这里是什么意思?
from typing import Generic, TypeVar
_T = TypeVar('_T')
class Base(Generic[_T]): pass
Run Code Online (Sandbox Code Playgroud) 我想在我的项目中引入部分类型注释。例如重载。我发现 pep561 引入了部分存根文件支持。
我使用 PyCharm 开发我的项目并添加相应的*.pyi文件。并得到了预期的信息,但 PyCharm 报告在 pyi 文件中找不到参考。
当pyi文件中没有条目时,是否可以强制PyCharm查看原始py文件?或者也许它也可以部分进入课堂?
??? main.py
??? pep561_test
??? __init__.py
??? __init__.pyi
Run Code Online (Sandbox Code Playgroud)
主文件
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)
Run Code Online (Sandbox Code Playgroud)
__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
Run Code Online (Sandbox Code Playgroud)
__init__.pyi
class AA:
def test1(self, a: int) -> int: ...
def test1(self, a: bool) …Run Code Online (Sandbox Code Playgroud) 我有一个程序(如宏),它在父程序中运行并从该程序导入一个 API 模块(让我们称之为foo)。问题是该模块仅存在于该程序中,因此我无法执行诸如在软件外部运行pydocmd之类的操作,因为该脚本会引发 ReferenceError。为了帮助我自己的开发,我foo.pyi在我的项目目录中创建了一个类型存根文件。如果导入失败,我想要做的是将该类型存根作为普通 Python 文件导入,以提供虚拟函数和属性。就像是:
try:
import foo
except ImportError:
from . import foo.pyi
Run Code Online (Sandbox Code Playgroud)
但是,这会引发错误,因为它试图pyi从foo项目文件夹中不存在的库中导入。我能想到的唯一另一种选择是拥有 .pyi 文件的相同副本,比如“dummy_foo.py”,但我必须在一个 repo 中维护同一文件的两个副本。我宁愿不这样做。
pyi ×4
python ×4
pycharm ×2
type-hinting ×2
annotations ×1
import ×1
pep ×1
python-3.6 ×1
stub ×1