- module01.py
- module02.py
- module03.py
三個模組檔案放在 package01 資料夾中, package01 就是套件名稱,這時 package01 資料夾需要有額外一個 __init__.py , __init__.py 可以不需要有任何內容,因為需要這個檔案,直譯器才能辨識 package01 為套件,如下圖

我們在 module01.py 設置以下的內容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | class Demo: __x = 0 def __init__( self , i): self .__i = i Demo.__x + = 1 def __str__( self ): return str ( self .__i) def hello( self ): print ( "hello " + self .__str__()) @classmethod def getX( cls ): return cls .__x class Other: def __init__( self , k): self .k = k def __str__( self ): return str ( self .k) def hello( self ): print ( "hello, world" ) def bye( self ): print ( "Good-bye!" , self .__str__()) class SubDemo(Demo, Other): def __init__( self , i, j): super ().__init__(i) self .__j = j def __str__( self ): return super ().__str__() + "+" + str ( self .__j) if __name__ = = "__main__" : a = SubDemo( 12 , 34 ) a.hello() a.bye() b = SubDemo( 56 , 78 ) b.hello() b.bye() # 《程式語言教學誌》的範例程式 # 檔名:module01.py # 功能:示範 Python 程式 # 作者:張凱慶 # 時間:西元 2010 年 12 月 |
現在我們寫另外一個 packagedemo.py 來利用 package01 中 module01.py 所定義的 Subdemo 類別,注意packagedemo.py 必須放在與 package01 相同資料夾中,我們將這個資料夾命名為 packagedemo ,如下圖

以下程式為 packagedemo.py 的內容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | from package01.module01 import SubDemo a = SubDemo( 12 , 34 ) a.hello() a.bye() b = SubDemo( 56 , 78 ) b.hello() b.bye() # 《程式語言教學誌》的範例程式 # 檔名:packagedemo.py # 功能:示範 Python 程式 # 作者:張凱慶 # 時間:西元 2010 年 12 月 |
執行結果如下

我們看到第 1 行引入套件的部份
1 | from package01.module01 import SubDemo |
首先是套件名稱,然後小數點符號,然後再接模組名稱,這是引入套件中模組依序的寫法。
那麼 __init__.py 除了讓直譯器識別資料夾為套件之外有什麼作用呢?這裡,我們可以在 __init__.py 裡提供一個 __all__ 變數,如下
1 2 3 4 5 6 7 8 | __all__ = [ "module01" , "module02" , "module03" ]; # 《程式語言教學誌》的範例程式 # 檔名:__init__.py # 功能:示範 Python 程式 # 作者:張凱慶 # 時間:西元 2010 年 12 月 |
當 __all__ 被定義後,寫
from package01 import * |
才能保證 module01 、 module02 及 module03 三個模組都被引入。
中英文術語對照 | |
---|---|
套件 | package |
模組 | module |
參考資料
http://docs.python.org/py3k/tutorial/modules.html
http://docs.python.org/py3k/reference/simple_stmts.html
http://docs.python.org/py3k/tutorial/modules.html
http://docs.python.org/py3k/reference/simple_stmts.html
3 則留言:
最後面是from package01 import * 對嗎?
是的,這邊漏打,已修改,感謝指正 ^_^
好像也會錯誤
from myprog.module01 import *
張貼留言