我有一个叫做元素的包,其中包含一些东西,比如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的类。
答案 0 :(得分:2)
如果您的__init__.py
未定义__all__
(从而限制使用from X import *
导入的内容),那么您可能在某处导致了import
在评估其定义之前要引用的模块。
答案 1 :(得分:0)
检查循环导入。如果两个模块都使用“导入”导入形式,则循环导入很好。当第二个模块想要从第一个模块中取出一个名称(“来自模块导入名称”)并且导入位于顶层时,它们会失败。那是因为第一个模块中的名称尚未可用,因为第一个模块正在忙于导入第二个模块。 其次,如果在调用导入时在函数内部调用导入,则第一个模块将完成初始化,第二个模块可以执行导入。