python - 从动态导入的模块中的类的字符串名称动态实例化?

在 python 中,我必须实例化某个类,知道它在字符串中的名称,但是这个类“存在”在一个动态导入的模块中。下面是一个例子:

加载类脚本:

import sys
class loader:
  def __init__(self, module_name, class_name): # both args are strings
    try:
      __import__(module_name)
      modul = sys.modules[module_name]
      instance = modul.class_name() # obviously this doesn't works, here is my main problem!
    except ImportError:
       # manage import error

一些动态加载的模块脚本:

class myName:
  # etc...

我使用这种安排来使加载器类使用任何动态加载的模块,遵循 dyn-loaded-modules 中的某些预定义行为...

最佳答案

您可以使用 getattr

getattr(module, class_name)

访问类(class)。更完整的代码:

module = __import__(module_name)
class_ = getattr(module, class_name)
instance = class_()

如前所述 below ,我们可以使用importlib

import importlib
module = importlib.import_module(module_name)
class_ = getattr(module, class_name)
instance = class_()

https://stackoverflow.com/questions/4821104/

相关文章:

linux - 我的环境变量是什么?

python - 为什么 print 在 lambda 中不起作用?

python - 如何让 Pylint 识别 NumPy 成员?

python - django 测试应用程序错误 - 创建测试数据库时出错 : permission

python - 为什么 Python 3.x 的 super() 有魔力?

linux - 对于高级用户来说,有哪些优秀的 Linux/Unix 书籍?

python - Queue.Queue 与 collections.deque

python - 如何在 Python 中获取 PATH 环境变量分隔符?

linux - 发送电子邮件的 Shell 脚本

linux - 如何更改 Ubuntu 中的默认 GCC 编译器?