如何按名称调用模块方法?
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]()
或类似的。
我有带有一些逻辑处理程序的模块
- 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]()
或类似的。