现在我有这样的脚本:
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
答案 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()
检测命名对象(类)中的对象。