在 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)
访问课程。更完整的代码:
module = __import__(module_name) class_ = getattr(module, class_name) instance = class_()
如下所述,我们可以使用 importlib
import importlib module = importlib.import_module(module_name) class_ = getattr(module, class_name) instance = class_()