3

我有一个名为 elements 的包,其中包含一些东西,如按钮、三推子、海报。在 Button 类中,我正在做from elements import *

这可以正常执行,当我尝试时print(poster),也可以正常工作并按预期运行。但是,当我这样做时print(trifader)NameError: name 'trifader' is not defined. 即使trifader和poster在同一个包中,poster是定义的,但是trifader不是吗?多么奇怪。对此有什么解释吗?

元素包的目录结构是这样的:

Elements:
  __init__.py
  trifader.py
  button.py
  poster.py

此外,还有一些其他不相关的东西。

每个 .py 文件都包含一个名为 .py 的类,例如 trifader.py 有一个名为 TriFader 的类。

4

2 回答 2

2

如果您__init__.py没有__all__定义(从而限制使用导入的内容from X import *),那么您可能在import某处有一个循环,导致模块在其定义被评估之前被引用。

于 2012-11-08T01:11:59.300 回答
0

检查循环导入。循环导入很好,两个模块都使用“import”形式的导入。当第二个模块想要从第一个模块中获取一个名称(“从模块导入名称”)并且导入位于顶层时,它们会失败。那是因为第一个模块中的名称尚不可用,因为第一个模块正忙于导入第二个模块。其次,如果在调用导入时函数内部调用了导入,则第一个模块将完成初始化,第二个模块可以进行导入。

于 2012-11-08T01:13:07.673 回答