1. 程式人生 > >11.python開源——工程專案結構

11.python開源——工程專案結構

        工程專案結構需要先弄清三個概念:包、模組、類

        模組對應的是一個.py 檔案,那麼module_name 就是這個檔案去掉.py 之後的檔名,py 檔案中可以直接定義一些變數、函式、類。

匯入模組

import module_name

from package_name import module_name

from package_name import *

那麼如何import 時,python 直譯器如何才能找到該模組放置的檔案位置呢?python 尋找模組的優先順序如下:

1、   當前檔案目錄

2、   環境變數PYTHONPATH

3、   sys.path(list 型別)

        模組在被匯入執行時,python直譯器為加快程式的啟動速度,會在與模組檔案同一目錄下生成.pyc檔案。我們知道python是解釋性的指令碼語言,而.pyc是經過編譯後的位元組碼,這一工作會自動完成,而無需程式設計師手動執行。

        將某些功能相近的檔案組織在同一資料夾下,就需要運用包的概念。包對應於資料夾,使用包的方式跟模組也類似,唯一需要注意的是,當資料夾當作包使用時,資料夾需要包含__init__.py檔案,主要是為了避免將資料夾名當作普通的字串。__init__.py的內容可以為空,一般用來進行包的某些初始化工作或者設定__all__值,__all__是在from package-name import *這語句使用的,全部匯出定義過的模組。

        Python使用縮排對齊組織程式碼的執行,所有沒有縮排的程式碼(非函式定義和類定義),都會在載入時自動執行,這些程式碼,可以認為是Python的main函式。

        每個檔案(模組)都可以任意寫一些沒有縮排的程式碼,並且在載入時自動執行,為了區分主執行檔案還是被呼叫的檔案,Python引入了一個變數__name__,當檔案是被呼叫時,__name__的值為模組名,當檔案被執行時,__name__為'__main__'。這個特性,為測試驅動開發提供了支援,可以在每個模組中寫上測試程式碼,這些測試程式碼僅當模組被Python直接執行時才會執行,程式碼和測試完美的結合在一起。

__init__.py

__init__.py可以為空,只要它存在,就表明此目錄應被作為一個package處理。當然,__init__.py中也可以設定相應的內容。

__init__ 方法通常用在初始化一個類例項的時候

__all__

在模組(*.py)中使用匯出__all__列表裡的類、函式、變數等成員,否則將匯出所有不以下劃線開頭(私有)的成員,在模組中使用__all__屬性可避免在相互引用時的命名衝突

__path__變數

__path__指定了包的搜尋路徑

__new__

__new__方法接受的引數雖然也是和__init__一樣,但__init__是在類例項建立之後呼叫,而 __new__方法正是建立這個類例項的方法

        依照Python官方文件的說法,__new__方法主要是當你繼承一些不可變的class時(比如int, str, tuple), 提供給你一個自定義這些類的例項化過程的途徑。還有就是實現自定義的metaclass。