如何按名称调用模块方法?

How to call modules methods by name?

我有带有一些逻辑处理程序的模块

 - handlers
   - __init__.py
   - items.py (with class Items)
   - users.py (with class Users)
 - app.py

在主脚本中 app.py 我需要创建项目或用户的实例 class 并调用一些操作。动态地,通过一些参数,如 { collection: "items", method: "get" }

oItems = items.Items()
oItems.get()

我知道如何从模块加载所有处理程序:from handlers import *,但我不知道如何创建 collection class 的实例和调用方法。

如果没有动态收集,它将是

method = getattr(items.Items(), 'get')
method()

但是创建实例 - 对我来说是个问题。我在努力

 oItems = type('items.Items', (), {})

但它为 __main__ 模块创建实例,而不是 handlers

模块实际上只是具有属性的对象。因此,您可以动态检索这些属性:

 collection_module = getattr(handlers, 'items')
 collection_class = getattr(collection_module, 'Items')
 collection = collection_class()

您可以将 存储在字典中以便于查找:

 handlers_mapping = {'items': items.Items, 'users': users.Users}

然后使用 handlers_mapping[type_name]() 或类似的。