pycharm 如何将类型提示添加到已存在的模块类的monkey-patched函数中?

ehxuflar  于 2023-11-19  发布在  PyCharm
关注(0)|答案(1)|浏览(132)

我想知道如何将类型提示(用于PyCharm IDE代码完成支持)添加到一个方法def links(self) -> List[str]中,该方法被我monkey-patched到一个existing module's类中:

我的函数

def issue_links(self) -> List[str]:
    links = []
    # ...
    return links

字符串

Monkey-patching函数到python-jira的Issue

from jira.resources import Issue

# {...} my defined function code is somewhere here

Issue.links = issue_links


现在我遇到的问题是,当我在Issue对象上调用PyCharm时,PyCharm显然无法识别这个方法。我试图遵循PEP 484 Stub Files并使用.pyi文件中的typing模块来让IDE找到我的monkey-patched函数的定义。

issue.pyi

from typing import List

class Issue:
    def links(self) -> List[str]: ...


然而,它不会工作。我的假设是,文件结构是不正确的:

文件位置

jira-python module>>站点包(使用pip install jira下载)
myFile.py >> /temp/myFile.py
Issue.pyi>> /temp/jira/resources/Issue.pyi文件夹

xqnpmsa8

xqnpmsa81#

也许使用一个扩展文件并不是您想要实现的最佳方法,因为在这种情况下,您必须在存根中复制Issue的完整接口,正如在注解中已经讨论过的那样。
为什么不使用继承来实现这一目的呢?

from jira.resources import Issue as JiraIssue
from typing import List

class Issue(JiraIssue):
    def links(self) -> List[str]:
        # your function code here

字符串
或者,如果你真的只想定义接口:

from jira.resources import Issue as JiraIssue
from typing import List, Protocol

class WithLinks():
    def links(self) -> List[str]: ...

class Issue(JiraIssue, WithLinks):
    pass

相关问题