动态导入类

时间:2017-07-07 17:02:35

标签: 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]
    for enum in enums:
        enum.start()
    for enum in enums:
        enum.join()

哪些类很长并需要很多行。我需要将每个类移动到单独的文件,然后将所有类导入主脚本。所以我创建了文件夹引擎,并在内部放置了三个文件,其中包括类first.py,second.py和third.py,还有文件__init__.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

2 个答案:

答案 0 :(得分:2)

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

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

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

要加载它们,您必须使用import语句。在这种情况下,您可以使用__import__("{0}.{1}".format(module,enumm))

答案 1 :(得分:-1)

使用简单的if语句并将set变量名称作为对象,并使用dir()检测命名对象(类)中的对象。

相关问题