Python 循環(huán)導(dǎo)入的問題

首先出現(xiàn)這種問題是因?yàn)闆]有規(guī)劃好層級,哪些模塊和哪些模塊邏輯上應(yīng)該在一起,哪些模塊是公共的依賴項(xiàng),哪些是實(shí)際的業(yè)務(wù)代碼,按你的需求,顯然B.Model應(yīng)該是一個獨(dú)立的模塊才對,把第一和第三層合成一個模塊然后把第二層獨(dú)立出去就會出現(xiàn)你這種情況。循環(huán)引用是小問題,代碼以后難維護(hù)、理不清實(shí)現(xiàn)的邏輯才是大問題。其次,Python根本就是可以循環(huán)引用的,只要你循環(huán)引用中的模塊并不是在定義階段就馬上使用,比如:#module1.py


class Model(object):
    def do_something(self):
        module2.print_model(self)

#module2.py
import module1

def print_model(model):
    print repr(module1.Model())

兩個import其中的一個在導(dǎo)入時會為空,取決于import順序,但由于只有在函數(shù)內(nèi)部使用,只要import階段沒有執(zhí)行到相應(yīng)的位置就不會有問題。也就是說出現(xiàn)這種情況時只要避免三種使用方法:

  1. from ... import ... (這個去掉肯定沒啥問題)
  2. 直接執(zhí)行的代碼(本來大部分情況下你都應(yīng)該避免的)
  3. 類的繼承(基類的模塊去import派生類的模塊本來就很奇怪?。?/li>

import放到函數(shù)里面,放到最下面,都可以解決問題,但治標(biāo)不治本,治本的還是要重新劃分模塊,邏輯理順了就不會出現(xiàn)循環(huán)import

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容