亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

ImportError:無法導入名稱X

ImportError:無法導入名稱X

海綿寶寶撒 2019-07-10 10:00:20
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+已經很長時間了。我猜想,這個錯誤是由于兩次導入實體造成的,一次在主,一次在物理中,但我不知道有什么解決辦法。有人能幫忙嗎?
查看完整描述

3 回答

?
慕無忌1623718

TA貢獻1744條經驗 獲得超4個贊

雖然您應該明確地避免循環依賴,但是可以推遲python中的導入。

例如:

import SomeModuledef someFunction(arg):
    from some.dependency import DependentClass

這(至少在某些情況下)可以避免錯誤。


查看完整回答
反對 回復 2019-07-10
?
青春有我

TA貢獻1784條經驗 獲得超8個贊

這是一個循環依賴關系。它可以在不對代碼進行任何結構修改的情況下得到解決。出現此問題是因為vector你要求entity可以立即使用,反之亦然。造成此問題的原因是,您要求在模塊準備就緒之前訪問該模塊的內容-方法是使用from x import y..這與

import x
y = x.ydel x

Python能夠檢測循環依賴關系,并防止導入的無限循環。本質上,所發生的一切就是為模塊創建一個空占位符(即。它沒有任何內容)。編譯循環相關模塊后,它將更新導入的模塊。就像這樣。

a = module() # import a# rest of modulea.update_contents(real_a)

要使python能夠處理循環依賴關系,必須使用import x只有風格。

import xclass cls:
    def __init__(self):
        self.y = x.y

由于不再在頂層引用模塊的內容,python可以編譯模塊,而不必實際訪問循環依賴項的內容。在頂層,我指的是編譯期間將執行的行,而不是函數的內容(例如。y = x.y)。訪問模塊內容的靜態或類變量也會導致問題。


查看完整回答
反對 回復 2019-07-10
  • 3 回答
  • 0 關注
  • 708 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號