簡體   English   中英

動態導入和創建類實例

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM