使用python模块

alf*_*_80 0 python module

我在另一个内部使用python模块时遇到问题.用例如下:

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

在文件A.py中:

import B

...
...
Run Code Online (Sandbox Code Playgroud)

在文件B.py中:

import C
import A

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

...
...
Run Code Online (Sandbox Code Playgroud)

在文件C.py中:

...
...
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?提前致谢.

aba*_*ert 6

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

请参阅如何使模块相互导入?在FAQ中进行解释,以及一些不同的解决方法.Fredrik Lundh的effbot网站上还有一个循环导入部分.但简单地说:

  • A 开始执行.
  • A到达import B.
  • B 开始执行.
  • B到达import A.既然A已经存在,这什么都不做.无论什么代码A都没有运行 - 就像A.func2-still 的定义没有运行一样.
  • B尝试使用A.func2,尚未定义,所以你得到一个错误.

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

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