天天看點

Python : __init__.py的作用

一、__init__.py的作用:

        在使用pydev插件,在eclipse建立package時,會自動在package所在的目錄自動建立一個__init__.py檔案,且檔案内容為空。這個檔案有什麼有呢?

       __init__.py的作用有如下幾點:

       1. 相當于class中的def __init__(self):函數,用來初始化子產品。

       2. 把所在目錄當作一個package處理

       3. from-import 語句導入子包時需要用到它。 如果沒有用到, 他們可以是空檔案。

           如引入package.module下的所有子產品

           from package.module import * 

           這樣的語句會導入哪些檔案取決于作業系統的檔案系統. 是以我們在__init__.py 中加入 __all__變量. 

           該變量包含執行這樣的語句時應該導入的子產品的名字. 它由一個子產品名字元串清單組成.

二、python在執行import語句時的步驟

    1:建立一個新的,空的module對象(它可能包含多個module);

    2:把這個module對象插入sys.module中

    3:裝載module的代碼(如果需要,首先必須編譯)

    4:執行新的module中對應的代碼。

    在執行第3步時,首先要找到module程式所在的位置,其原理為:如果需要導入的module的名字是module1,則解釋器必須找到module1.py。

    它首先在目前目錄查找,然後是在環境變量pythonpath中查找。pythonpath可以視為系統的path變量一類的東西,其中包含若幹個目錄。如果pythonpath沒有設定,或者找不到module1.py,則繼續搜尋與python的安裝設定相關的預設路徑,在unix下,通常是/usr/lib64/python2.6/。

    事實上,搜尋的順序是:目前路徑 (以及從目前目錄指定的sys.path),然後是pythonpath,然後是python的安裝設定相關的預設路徑。正因為存在這樣的順序,如果目前 路徑或pythonpath中存在與标準module同樣的module,則會覆寫标準module。也就是說,如果目前目錄下存在xml.py,那麼執 行import xml時,導入的是目前目錄下的module,而不是系統标準的xml。