問題
你想將你的代碼組織成由很多分層模塊構成的包。
解決方案
封裝成包是很簡單的撤逢。在文件系統(tǒng)上組織你的代碼膛锭,并確保每個目錄都定義了一個init.py文件粮坞。 例如:
graphics/
__init__.py
primitive/
__init__.py
line.py
fill.py
text.py
formats/
__init__.py
png.py
jpg.py
一旦你做到了這一點蚊荣,你應該能夠執(zhí)行各種import語句,如下:
import graphics.primitive.line
from graphics.primitive import line
import graphics.formats.jpg as jpg
討論
定義模塊的層次結構就像在文件系統(tǒng)上建立目錄結構一樣容易莫杈。 文件init.py的目的是要包含不同運行級別的包的可選的初始化代碼互例。 舉個例子,如果你執(zhí)行了語句import graphics筝闹, 文件graphics/init.py將被導入,建立graphics命名空間的內容媳叨。像import graphics.format.jpg這樣導入,文件graphics/init.py和文件graphics/graphics/formats/init.py將在文件graphics/formats/jpg.py導入之前導入关顷。
絕大部分時候讓init.py空著就好糊秆。但是有些情況下可能包含代碼。 舉個例子议双,init.py能夠用來自動加載子模塊:
from . import jpg
from . import png
像這樣一個文件,用戶可以僅僅通過import grahpics.formats來代替import graphics.formats.jpg以及import graphics.formats.png痘番。