gpt4 book ai didi

python - 有没有办法让 pydev (或任何 Python IDE)理解使用 __import__ 或 exec 导入的模块

转载 作者:行者123 更新时间:2023-11-30 23:28:42 27 4
gpt4 key购买 nike

简介

Pydev 是一个很棒的 Eclipse 插件,可以让我们轻松编写 Python 代码。

当我这样做时,它甚至可以给出自动完成建议:

from package.module import Random_Class
x = Random_Class()
x. # the autocompletion will be popped up,
# showing every method & attribute inside Random_Class

太棒了!!!

问题(和我的问题)

但是,当我不使用显式导入,并使用 __import__ 时,我无法获得相同的自动完成效果。

import_location = ".".join(('package', 'module'))
__import__(import_location, globals(), locals(), ['*'])
My_Class = getattr(sys.modules[import_location], 'Random_Class')
x = My_Class()
x. # I expect autocompletion, but nothing happened

Question: is there any way (in pydev or any IDE) to make the second one also show autocompletion?

为什么我需要这样做?

嗯,我制作了一个简单的 MVC 框架,我想提供诸如 load_modelload_controllerload_view 之类的东西,这些东西仍然可以工作具有自动完成功能(或至少可以工作)

因此,不要让用户这样做(尽管我不禁止他们这样做):

from applications.the_application.models.the_model import The_Model
x = The_Model()
x. # autocompletion works

我想让用户这样做:

x = load_model('the_application', 'the_model')()
x. # autocompletion still works

“应用程序”部分实际上可以通过另一个脚本进行配置,我不希望用户每次更改配置时都更改所有导入模型/ Controller 部分。另外,我认为 load_modelload_controllerload_view 使 MVC 模式显示得更加明显。

意外的答案

  1. 我知道一些技巧,例如这样做(就像人们所做的那样)web2py):

    import_location = ".".join(('package', 'module'))
    __import__(import_location, globals(), locals(), ['*'])
    My_Class = getattr(sys.modules[import_location], 'Random_Class')
    x = My_Class()
    if 0:
    from package.module import Random_Class
    x = Random_Class()
    x. # Now autocompletion is going to work

    我不希望这样做,因为它只会增加不必要的额外的工作。

  2. 我不希望有任何不要试图变得聪明评论。我已经受够了
  3. 我不希望出现动态导入是邪恶的评论。我不是纯粹主义者。
  4. 我不希望有任何只使用 django、pylons 或其他评论。比如与我的问题无关的评论。

最佳答案

我以前做过这个。这可能与您想要的方法略有不同,因此如果不适用,请告诉我。

我使用与您的示例类似的代码动态导入所有子类为主类的不同模块。因为子类化模块已经导入了 master,所以我不需要在主模块中导入它。

为了突出显示,解决方案是首先将主类导入到主模块中,即使它没有直接使用。就我而言,如果特定子类不存在,这是一个很好的后备方案,但这是一个实现细节。

只有当您的类全部继承自一个父类时,这才有效。

关于python - 有没有办法让 pydev (或任何 Python IDE)理解使用 __import__ 或 exec 导入的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21506547/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com