2016-10-21 62 views
0

我想兩個文件 這之間創建全局變量全局變量是相關的代碼片段:分享不同的Python模塊

Logger.py

import globals 
class Logger(): 
... 
    def log(self): 
    globals.sql.execute('..') 

globals.py

import Logger 
import SQL 

logger=Logger.Logger() 
sql=SQL.SQL() 

運行時出現錯誤

AttributeError: 'module' object has no attribute 'sql'

globals.sql.execute('..')

回答

3

你有一個圓形的進口,進口Logger其中globals進口Logger。接下來,Logger.Logger()行在sql=SQL.SQL()行之前運行,因此後者尚不存在

您的代碼,否則不完整,但如果你試圖從Logger.__init__()方法記錄任何東西,這意味着globals模塊尚未完成,你會得到你的屬性錯誤。

您可以通過移動sql = SQL.SQL()行來運行,然後在之前創建Logger()實例來解決此問題。但是,請考慮完全避免循環導入。

例如,您可以將sql對象傳入記錄器以避免需要創建循環導入。

+0

你能提出一種避免循環導入的方法嗎? – Kikapi

+0

@Kikapi:加入;不要使用'sql'作爲全局變量,將它作爲參數傳遞給記錄器。 –