如何将类型提示添加到现有模块类的猴子修补函数中?

问题描述 投票:0回答:1

我想知道如何将类型提示(用于 PyCharm IDE 代码完成支持)添加到方法

def links(self) -> List[str]
,我将其猴子修补到 现有模块的 类:

我的功能

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

将函数猴子修补到 python-jira 的
Issue

from jira.resources import Issue

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

Issue.links = issue_links

现在我遇到的问题是,当我在

Issue
对象上调用此方法时,PyCharm 显然无法识别该方法。我尝试遵循 PEP 484 存根文件 并使用 typing
 文件中的 
.pyi
 模块来让 IDE 找到我的猴子修补函数的定义。

问题.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 文件夹

python pycharm type-hinting monkeypatching pyi
1个回答
0
投票

也许使用存根文件并不是实现您想要实现的目标的最佳方法 - 因为在这种情况下,您必须在存根中复制

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
© www.soinside.com 2019 - 2024. All rights reserved.