猿问

ImportError:无法导入名称X

ImportError:无法导入名称X

我有四个不同的文件名为:主,矢量,实体和物理。我不会发布所有的代码,仅仅是导入,因为我认为这就是错误所在。(如果你愿意,我可以张贴更多)

主要:

import timefrom entity import Entfrom vector import Vect#the rest just creates an entity and prints the result of movement

实体:

from vector import Vectfrom physics import Physicsclass Ent:
    #holds vector information and iddef tick(self, dt):
    #this is where physics changes the velocity and position vectors

矢量:

from math import *class Vect:
    #holds i, j, k, and does vector math

物理学:

from entity import Entclass Physics:
    #physics class gets an entity and does physics calculations on it.

然后从main.py运行,得到以下错误:

Traceback (most recent call last):File "main.py", line 2, in <module>
    from entity import EntFile ".../entity.py", line 5, in <module>
    from physics import PhysicsFile ".../physics.py", line 2, in <module>
    from entity import EntImportError: cannot import name Ent

我对Python非常陌生,但我使用C+已经很长时间了。我猜想,这个错误是由于两次导入实体造成的,一次在主,一次在物理中,但我不知道有什么解决办法。有人能帮忙吗?


海绵宝宝撒
浏览 679回答 3
3回答

慕无忌1623718

虽然您应该明确地避免循环依赖,但是可以推迟python中的导入。例如:import&nbsp;SomeModuledef&nbsp;someFunction(arg): &nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;some.dependency&nbsp;import&nbsp;DependentClass这(至少在某些情况下)可以避免错误。

青春有我

这是一个循环依赖关系。它可以在不对代码进行任何结构修改的情况下得到解决。出现此问题是因为vector你要求entity可以立即使用,反之亦然。造成此问题的原因是,您要求在模块准备就绪之前访问该模块的内容-方法是使用from x import y..这与import&nbsp;x y&nbsp;=&nbsp;x.ydel&nbsp;xPython能够检测循环依赖关系,并防止导入的无限循环。本质上,所发生的一切就是为模块创建一个空占位符(即。它没有任何内容)。编译循环相关模块后,它将更新导入的模块。就像这样。a&nbsp;=&nbsp;module()&nbsp;#&nbsp;import&nbsp;a#&nbsp;rest&nbsp;of&nbsp;modulea.update_contents(real_a)要使python能够处理循环依赖关系,必须使用import x只有风格。import&nbsp;xclass&nbsp;cls: &nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;__init__(self): &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.y&nbsp;=&nbsp;x.y由于不再在顶层引用模块的内容,python可以编译模块,而不必实际访问循环依赖项的内容。在顶层,我指的是编译期间将执行的行,而不是函数的内容(例如。y = x.y)。访问模块内容的静态或类变量也会导致问题。
随时随地看视频慕课网APP

相关分类

Python
我要回答