首页 > 解决方案 > 使用反射从包中加载和实例化模块?

问题描述

我有一个名为的包(一个文件夹) ,models其中包含 __init__.py, model_a.py, model_b.py.

我的__init__.py包含:

from models.model_a import ModelA
from models.model_b import ModelB

在我的main.py我做

import models

model = get_model(config.use_model) #config.use_model == "ModelA"

def get_model(model):
    # This should be equivalent to models.ModelA(**config.ModelA.structure)
    return models[model](**config[model].structure)

哪个抛出错误TypeError: 'module' object is not subscriptable

基本上我想要做的是优雅地加载配置中设置的模型。像这样访问配置工作正常。

标签: python

解决方案


我不知道它是否写但你可以试试这个,

import models
import sys

def get_model(model):
    return getattr(models, model)


model = get_model('ModelA')
print(model())  

推荐阅读