使用我的python应用程序,我有40个模块(类),其中包含一些文本的解析器。在我的函数中,我只想实现并使用特定的模块。这些都在数据库中排序。
我现在知道我的解析器,并且同时拥有我要导入和创建的python文件名和类
然而....你怎么在python中实际做到这一点?
例如
file_name = 'lex_parser'
class_name = 'LexParser'
我该怎么做....
from {file_name} import {class_name}
Parser = {class_name}()
按照我的意思?
答案 0 :(得分:5)
试试这个:
file_name = 'lex_parser'
class_name = 'LexParser'
Parser = getattr(__import__(file_name), class_name)
请注意,file_name
不得包含.py
。
如果模块位于包中,则无效,因为__import__
将返回顶级包。在这种情况下,您可以这样做:
import sys
file_name = 'parsers.lex_parser'
class_name = 'LexParser'
__import__(file_name)
Parser = getattr(sys.modules[file_name], class_name)
这适用于这两种情况,并由__import__
函数documentation推荐。
在两个示例中,Parser
是一个必须通常实例化的类:
parser = Parser()
答案 1 :(得分:3)
这样的事情怎么样:
module = __import__('my_module')
if hasattr(module, 'ClassName'):
ClassName = module.ClassName
my_object = ClassName()