Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 动态导入类_Python - Fatal编程技术网

Python 动态导入类

Python 动态导入类,python,Python,现在我有这样的脚本: class threadEnum(): pass class first(threadEnum): pass class second(threadEnum): pass class third(threadEnum): pass enums = [enum(domain, [], q=subdomains_queue, silent=silent, verbose=verbose) for enum in chosenEnums]

现在我有这样的脚本:

class threadEnum():
    pass

class first(threadEnum):
    pass

class second(threadEnum):
    pass

class third(threadEnum):
    pass

enums = [enum(domain, [], q=subdomains_queue, silent=silent, verbose=verbose) for enum in chosenEnums]
    for enum in enums:
        enum.start()
    for enum in enums:
        enum.join()
哪些课程很长,需要很多线。我需要将每个类移动到单独的文件中,然后将所有类导入主脚本。因此,我创建了文件夹引擎,并将三个文件放入其中,分别包含first.py、second.py和third.py类以及file uuu init_uu.py

我想一定是这样的:

import importlib

class threadEnum():
    pass

chosenEnums = []
chosenEnums = ['first', 'second', 'third']

# Load classes from engines folder
for enumm in chosenEnums:
    module = 'engines'
    # create a global object containging our module
    mymethod = getattr(importlib.import_module('engines'), enumm)

enums = [enum(domain, [], q=subdomains_queue, silent=silent, verbose=verbose) for enum in chosenEnums]
    for enum in enums:
        enum.start()
    for enum in enums:
        enum.join()
但我得到了一个错误:

AttributeError:“module”对象没有“first”属性


怎么了?Python 2.7.6

使用简单的if语句,将变量名设置为对象,并使用dir检测命名对象类中的对象。

将文件夹作为模块导入时,其中的文件不会立即作为属性加载

>>> import importlib
>>> print(dir(importlib.import_module('engines'))

['__doc__', '__loader__', '__name__', '__package__', '__path__', '__spec__']

要加载它们,必须使用导入语句。在这种情况下,您可以使用uuu import uuu{0}.{1}.formatmodule,enumm.

Try而不是geattr。。。使用just mymethod=importlob.import_module'engines.+enummYou可以尝试uuu导入u{0}.{1}.formatmodule,enummOk。但是现在我得到了错误名称错误:名称“threadEnum”没有定义可能是因为您没有在该文件中定义类threadEnum所以我需要在每个类threadEnum类中重新定义?还是使用相互导入?但是如何从根目录从引擎文件夹导入?你能详细说明你的建议吗?可能提供一个工作代码示例?