我有一个名为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
基本上我想做的是优雅地加载在配置中设置的模型。像这样访问配置工作正常。
答案 0 :(得分:2)
我不知道它是写的,但你可以试试这个,
import models
import sys
def get_model(model):
return getattr(models, model)
model = get_model('ModelA')
print(model())
答案 1 :(得分:2)
您正在尝试进行编程属性访问,因此您需要使用getattr
函数:
static Future<User> getUser(String userKey) async {
Completer<User> completer = new Completer<User>();
String accountKey = await Preferences.getAccountKey();
FirebaseDatabase.instance
.reference()
.child("accounts")
.child(accountKey)
.child("users")
.childOrderBy("Group_id")
.equals("54")
.once()
.then((DataSnapshot snapshot) {
var user = new User.fromSnapShot(snapshot.key, snapshot.value);
completer.complete(user);
});
return completer.future;
}
}
class User {
final String key;
String firstName;
Todo.fromJson(this.key, Map data) {
firstname= data['Firstname'];
if (firstname== null) {
firstname= '';
}
}
}
订阅(方括号,如return getattr(models, model)(**config[model].structure)
)与属性访问(带点,如foo[1]
)不同,与foo.bar
表示不同的方式完全相同到foo[2]
。