错误动态导入和调用python 2.7中的模块

时间:2014-02-02 21:58:41

标签: python python-2.7

我无法让以下两个示例协同工作,dynamically loading a modulecalling a function by string。我正在尝试动态加载和调用python模块。

我的文件结构如下

src/
    main.py
    __init__.py
    modules/
        __init__.py
        module1.py
        module2.py
        ...
        module100.py

在我的main.py函数中,我有以下内容来加载模块,

mod = imp.load_source('module', '/path/to/module.py')

这似乎工作正常,print module产生

<module 'module' from '/path/to/module.py'>

module.py我有

class module:

    def __init__(self):
        print ("HELLO WORLD")

    def calc(self):
        print ("calc called")


    if __name__ == "__main__":
        import sys
        sys.exit(not main(sys.argv))

问题是当我尝试在模块中调用calc函数时,

result = getattr(module, 'calc')()

产生以下

  HELLO WORLD
Traceback (most recent call last):
  File "main.py", line 39, in main
    result = getattr(module, 'calc')()
AttributeError: 'module' object has no attribute 'calc

我不确定我错过了什么或做错了

1 个答案:

答案 0 :(得分:2)

出于某种原因,你也将你的课程命名为module,这让你感到困惑。

您的module是一个模块:

>>> mod = imp.load_source('module', 'module.py')
>>> mod
<module 'module' from 'module.pyc'>
>>> dir(mod)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'module']

您的课程为mod.module

>>> x = mod.module()
HELLO WORLD
>>> x
<module.module instance at 0xa1cb18c>
>>> type(x)
<type 'instance'>

旁边:行

    self

不执行任何操作,并且您的calc方法需要接受参数,或者当您调用它时,您将获得TypeError: calc() takes no arguments (1 given)