必须评估字符串才能从模块访问类

发布于 2024-10-20 04:39:19 字数 386 浏览 2 评论 0原文

我已经加载了我的模块之一与 __import__ 。

现在我将模块保存在变量中,但我想创建 mymodule 类的实例。事情是 - 我已经将模块名称作为字符串传递到我的脚本中。 所以我有一个包含模块的变量,并且我有模块名称,但作为字符串。

variable_containing_module.string_variable_with_ Correct_classname() 不起作用。因为它说模块中不存在“string_variable_with_ Correct_classname”这样的东西 - 因为它不评估字符串名称。我怎样才能这样做呢?

I've loaded one of my modules <module my_modules.mymodule from .../my_modules/mymodule.pyc> with __import__.

Now I'm having the module saved in a variable, but I'd like to create an instance of the class mymodule. Thing is - I've gotten the module name passed as string into my script.
So I've got a variable containing the module, and I've got the module name but as string.

variable_containing_module.string_variable_with_correct_classname() doesn't work. Because it says there is no such thing in the module as "string_variable_with_correct_classname" - because it doesn't evaluate the string name. How can I do so?

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

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

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

海风掠过北极光 2024-10-27 04:39:19

您的问题是 __import__ 是为导入内部使用而设计的,而不是真正供直接使用的。这种情况的一个症状是,当从包内部导入模块时,会返回顶级包而不是模块本身。

有两种方法可以解决这个问题。首选方法是使用 importlib.import_module() 而不是直接使用 __import__

如果您使用的是不提供 importlib 的旧版 Python,那么您可以创建自己的辅助函数:

import sys
def import_module(module_name):
    __import__(module_name)
    return sys.modules[module_name]

另请参阅 http://bugs.python.org/issue9254

Your problem is that __import__ is designed for use by the import internals, not really for direct usage. One symptom of this is that when importing a module from inside a package, the top-level package is returned rather than the module itself.

There are two ways to deal with this. The preferred way is to use importlib.import_module() instead of using __import__ directly.

If you're on an older version of Python that doesn't provide importlib, then you can create your own helper function:

import sys
def import_module(module_name):
    __import__(module_name)
    return sys.modules[module_name]

Also see http://bugs.python.org/issue9254

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文