PyCharm:猴子修补的代码完成

发布于 2025-01-10 12:33:43 字数 1038 浏览 2 评论 0原文

我想知道是否可以让 PyC​​harm 支持猴子修补函数的代码完成?

我有以下课程:

class _PathExt(Path):

    def ensure_exists(self):
        if not self.exists():
            if not self.parent.exists():
                os.makedirs(self.parent.absolute(), exist_ok=True)
            os.makedirs(self.absolute())
        return self

    def subdir(self, sub_name):
        return Path(os.path.join(self.absolute(), sub_name))

然后我对其进行猴子修补:

def monkey_patch(from_type, to_type):
    for name in [x for x in dir(from_type) if not x.startswith('_') and x not in dir(to_type)]:
        value = from_type.__getattribute__(from_type, name)
        if inspect.isfunction(value):
            setattr(to_type, name, value)


monkey_patch(_PathExt, Path)

这是可以理解的,因为它是动态的,所以它不起作用,所以我然后尝试:

Path.subdir = _PathExt.subdir

但 PyCharm 仍然无法检测到它。这有可能吗?

编辑:

在这种特定情况下,我决定从 Path 派生我的类,然后使用 as 别名导入我的类,因此这是一个替代品,但我'我仍然想知道是否可以采取任何措施来支持 PyCharm 中的猴子修补。

I'm wondering if it's possible to get PyCharm to support code completion for monkey patched functions?

I have the following class:

class _PathExt(Path):

    def ensure_exists(self):
        if not self.exists():
            if not self.parent.exists():
                os.makedirs(self.parent.absolute(), exist_ok=True)
            os.makedirs(self.absolute())
        return self

    def subdir(self, sub_name):
        return Path(os.path.join(self.absolute(), sub_name))

Which I then monkey patch with:

def monkey_patch(from_type, to_type):
    for name in [x for x in dir(from_type) if not x.startswith('_') and x not in dir(to_type)]:
        value = from_type.__getattribute__(from_type, name)
        if inspect.isfunction(value):
            setattr(to_type, name, value)


monkey_patch(_PathExt, Path)

It's understandable that this wouldn't work as it's dynamic, so I then tried:

Path.subdir = _PathExt.subdir

But still PyCharm won't detect it. Is this possible at all?

Edit:

In this specific case I've decided to derive my class from Path and then import my class with an as alias, so it's a drop in replacement, but I'd still like to know if anything can be done to support monkey patching in PyCharm.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文