繁体   English   中英

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

[英]error dynamically importing and calling module in python 2.7

我无法让以下两个示例协同工作, 动态加载模块并按字符串调用函数 我正在尝试动态加载和调用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

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

出于某种原因,你也将你的类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)在你调用它时TypeError: calc() takes no arguments (1 given)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM