Python:Import *只从包中导入某些东西?

时间:2012-11-08 01:01:05

标签: python import wildcard

我有一个叫做元素的包,其中包含一些东西,比如button,trifader,poster。在Button类中,我正在进行from elements import *

执行正常,当我尝试print(poster)时,也可正常工作并按预期运行。但是,当我执行print(trifader)NameError: name 'trifader' is not defined时。尽管小三角形和海报在同一个包装中,但海报是定义的,但是琐事不是?有多奇怪对此有任何解释吗?

元素包的目录结构是:

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

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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