首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用__import__导入类而不是模块

如何使用__import__导入类而不是模块
EN

Stack Overflow用户
提问于 2018-05-31 19:07:42
回答 3查看 954关注 0票数 0

我正在编写脚本(main_script.py),它应该从以下目录中找到的某些模块导入类:

代码语言:javascript
复制
main_script.py
    module1/
        __init__.py
        module1.py

__初始化__ .py文件包含以下内容:

代码语言:javascript
复制
from module1.module1 import Module1

The包含一个类Module1。模块2遵循完全相同的体系结构。

代码语言:javascript
复制
    module2/
        __init__.py
        module2.py

main_script.py应该能够基于某些条件导入类Module1Module2

在main_script.py内部:

代码语言:javascript
复制
module_list=['module1.module1', 'module2.module2']

for module in module_list:
    if some_condition:
        mod = __import__(module)
        class_ = getattr(mod, module.split(".")[1])
        setattr(self, m1, class_)

我发现它只导入模块,而不是类。有没有人能带我走上正轨?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-03 18:48:43

我解决了这个问题:

1)我采用了eqperes的注释并使用了importlib。2)我意识到在设置属性之前,我必须创建一个类的实例。所以我补充道:

代码语言:javascript
复制
module_list = ['module1.module1', 'module2.module2']

for module in module_list:
    if some_condition:
        mod = importlib.import_module(module)

        # Don't forget to capitalize the name of the class!
        class_ = getattr(mod, module.split(".")[1].capitalize())

        # Don't forget to make an instance of the class!!
        c=class_()

        setattr(self, m1, c)
票数 0
EN

Stack Overflow用户

发布于 2018-05-31 19:15:32

你可以这样做:

代码语言:javascript
复制
    _temp = __import__('foo.bar', globals(), locals(), ['object'], -1) 
object = _temp.object

另请参阅python docs

票数 0
EN

Stack Overflow用户

发布于 2018-05-31 19:20:24

您应该避免使用__import__,而应使用importlib

代码语言:javascript
复制
import importlib

module_list = ['module1.module1', 'module2.module2']

for module in module_list:
    if some_condition:
        mod = importlib.import_module(module)
        class_ = getattr(mod, module.split(".")[1].capitalize())
        # Don't forget to capitalize the name of the class!
        setattr(self, m1, class_)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50622903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档