2010-11-09 115 views
0

我在从特定模块导入类时遇到了一些麻烦。类是my_module1.my_module2.my_module3.my_module4.my_module5.my_module6.my_module7Python导入问题

此代码的工作

import my_module1.my_module2.my_module3.my_module4.my_module5.my_module6.my_module7 

模块,这意味着访问我的课我必须做

my_module1.my_module2.my_module3.my_module4.my_module5.my_module6.my_module7.MyClass 

在但这并不

from my_module1.my_module2.my_module3.my_module4.my_module5.my_module6.my_module7 import MyClass 

无论这是否

进口my_module1.my_module2.my_module3.my_module4.my_module5.my_module6.my_module7作为MY_NAME

均可以得到这个错误说

AttributeError: 'module' object has no attribute my_module7' 

这有我彻底难倒了,我一直在它的一对夫妇现在几星期。有什么建议么?

编辑 - 我不能改变不幸的是因为它是由我使用

回答

3

看起来像一个循环导入。

Gordon McMillan说: 循环进口罚款,其中两个模块使用“进口”形式的进口。当第二个模块想要从第一个模块(“从模块导入名称”中取出一个名称)并且导入位于顶层时,它们会失败。这是因为第一个名字尚不可用,因为第一个模块正在忙于导入第二个名字。

+0

+1我应该想到这一点。好的建议,我们会看到它发生的地方。 – Crisfole 2010-11-09 15:29:25

+0

是的,这是一个循环导入。我需要从我尝试导入的类访问类变量。你会建议如何解决这个问题?我最好重新考虑一下设计吗? – 2010-11-09 17:22:23

+0

那么,为了解决它,你只需要将你的导入从顶层移动到一个函数或类中。重新设计可能是最好的,但那是你的电话。 – toc777 2010-11-10 11:09:51

0

系统强加我想你可能要考虑在首位的备用设计(重新设计你的模块故障所以这是一个平坦的安装结构),但因为这是不是你的问题的尝试:

import my_module1.my_module2.my_modu...<etc> 
my_name = my_module1.my_module2.my_modu...<etc> 
my_name.MyClass 

模块是Python中的第一类对象,所以你可以通过使用变量别名他们。

+0

该代码给出了AttributeError的:“模块”对象有与MY_NAME行没有属性my_module7' = ... – 2010-11-09 15:22:29

+0

你能试试这个: 进口my_module1.my_module2.my_module ..... 目录(my_module1 .my_mod .... my_module6) 明显填满完整路径! 让我知道它说什么 – Crisfole 2010-11-09 15:25:16

+0

现在我在该行上得到一个AttributeError! (与dir(...)) – 2010-11-09 15:27:08