標籤:
包
Graphics/ __init__.py plot1d.py Primitive/ __init__.py lines.py fill.py text.py ... Graph2d/ __init__.py plot2d.py
多個關係密切的模組應該組織成一個包,以便於維護和使用。這項技術能有效避免名字空間衝突。
建立一個名字為包名字的檔案夾並在該檔案夾下建立一個__init__.py 檔案就定義了一個包。
無論一個包的哪個部分被匯入, 在檔案__init__.py中的代碼都會運行.這個檔案的內容允許為空白,不過通常情況下它用來存放包的初始化代碼。
匯入處理程序遇到的所有 __init__.py檔案都被運行.因此 import Graphics.Primitive.fill 語句會順序運行 Graphics 和 Primitive 檔案夾下的__init__.py檔案.
如下面這個語句只會執行Graphics目錄下的__init__.py檔案,而不會匯入任何模組
import GraphicsGraphics.Primitive.fill.floodfill(img,x,y,color) # 失敗!
不過既然 import Graphics 語句會運行 Graphics 目錄下的 __init__..py檔案,我們就可以採取下面的手段來解決這個問題:
# Graphics/__init__.pyimport plot1d, Primitive, Graph2d# Graphics/Primitive/__init__.pyimport lines, fill, text, ...
這樣import Graphics語句就可以匯入所有的子模組(只能用全名來訪問這些模組的屬性).
在lines.py中如果匯入 text.py 、plot1d.py 、plot2d.py
from . import text from . import plot1dfrom ..Graph2d import plot2d
2015-06-01
python之模組