[英]Dynamically import and create class instance
在我的python應用程序中,我有40個模塊(類),其中包含一些文本的解析器。 在我的函數中,我只想實例化並使用特定的模塊。 這些都在數據庫中排序。
我現在知道我的解析器,並且擁有我要導入和創建的python文件名和類
但是...。實際上如何在python中執行此操作?
例如;
file_name = 'lex_parser'
class_name = 'LexParser'
我能怎么做....
from {file_name} import {class_name}
Parser = {class_name}()
遵循我的意思嗎?
嘗試這個:
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__
函數文檔建議這樣__import__
。
在兩個示例中, Parser
都是一個類,您必須按常規實例化:
parser = Parser()
這樣的事情怎么樣:
module = __import__('my_module')
if hasattr(module, 'ClassName'):
ClassName = module.ClassName
my_object = ClassName()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.