使用python模块

时间:2014-01-23 01:22:41

标签: python module

我在另一个中使用python模块时遇到问题。用例如下:

请考虑以下情形。相应地评论了错误。

在文件A.py中:

import B

...
...

在文件B.py中:

import C
import A

c_func = C.func1() # works perfectly
a_func = A.func2() # Error: 'module' object has no attribute 'func2' 

...
...

在文件C.py中:

...
...

有什么想法吗?提前谢谢。

1 个答案:

答案 0 :(得分:6)

这是循环导入。一般来说,它们不起作用。

请参阅常见问题解答中的How can I have modules that mutually import each other?以获取解释,以及解决此问题的一些不同方法。在Fredrik Lundh的effbot网站上还有一个Circular Imports部分。但简单地说:

  • A开始执行。
  • A到达import B
  • B开始执行。
  • B到达import A。由于A已经存在,因此无效。无论A中的代码是什么还没有运行 - 就像A.func2的定义一样 - 仍然没有运行。
  • B尝试使用尚未定义的A.func2,因此您收到错误。

(更简单,但不太准确:B取决于A,这取决于B,这意味着BB之前无法运行这可以帮助您直观地理解问题,这可以帮助您理解上面更完整/准确的解释。)

您可能想要做的是将A B所需的代码移到一个单独的模块中,AB都可以导入,我需要导入AB。这不是唯一可能的解决方案(请参阅其他两个想法的FAQ条目),但是当它可以干净利落地完成时,它很难被击败。 (如果没有实际代码,很难给出更具体的答案。)