2012-04-16 102 views
0

可能重复:
Python: Circular (or cyclic) imports在Python中导入冲突?

我是新来的Python,和我有一个问题,但我不能完全肯定,如果这是我的问题。我有两个文件,user.py和comments.py。在user.py,我做

from comments import Comment 

和comments.py我做

from user import User 

我的用户负载很好,但是当我打开通向评论的URL,我得到了一个服务器错误。评论出from comments import Comment解决了这个问题。难道我做错了什么?

+1

你能告诉我们'comments.py'文件的内容吗? – Tadeck 2012-04-16 22:25:45

回答

1

是的,你有一个循环导入,并导致许多许多问题。如果您考虑导入时实际发生的情况,则类似于“将代码从文件x复制到此文件中”,但如果您从x复制到y然后从y复制到x,则您已创建一个无限循环,在这种情况下,解释器难以找出哪个模块应该取代或加载哪个模块。但是,如果您的程序架构正确,则不应该有任何问题。你有什么理由让这个通告进口?如果我们更仔细地看待问题,机会实际上并不需要它。

+0

两个文件都需要对方。有没有办法解决这个问题? – Snowman 2012-04-16 22:27:09

+3

@mohabitar:是的,修复你的设计。 – 2012-04-16 22:27:56

+0

谢谢你的洞察斯文。无论如何,我认为我只是将我的代码整理到两个单独的文件中。我不希望与用户相关的功能与评论相关的功能位于相同的文件中。所以我把它们分开了。但由于用户可以发表评论,并且评论需要用户,所以我确实需要引用他们。有一个更好的方法吗? – Snowman 2012-04-16 22:30:29

1

这种循环导入不起作用。导入模块意味着基本上执行它中的语句。 import语句会在遇到它们时执行,因此至少在其中一个模块中,其他模块尚未初始化,因此导入将失败。

循环依赖被认为是反模式。在某些情况下,它们会以某种方式自然发生,但总的来说,它们是不良设计的标志。

您可以通过将其中一个导入语句移至模块末尾或功能级别来完成此工作,但我建议您不要这些“修复”。