Python模組包中 init

2021-09-07 22:24:48 字數 1380 閱讀 7149

用django做開發已經一年多的時間,但基本沒注意python模組中__init__.py檔案存在的意義,偶然看到對它的介紹嚇一大跳,這個檔案太重要了

模組包:

包通常總是乙個目錄,目錄下為首的乙個檔案便是 __init__.py。然後是一些模組檔案和子目錄,假如子目錄中也有 __init__.py 那麼它就是這個包的子包了。差不多就像這樣吧:

package1/ __init__.py    module1.py    module2.py    package2/ __init__.py       module1.py       module2.py

我們可以就這樣匯入乙個包:

import package1

或者調入乙個子模組和子包:

from package1 import module1from package1 import package2import packag1.module1import packag1.package2

可以深入好幾層包結構:

from package1.package2 import module1import package1.package2.module1

大致就這樣吧,我覺得,包的精髓應該是在 __init__.py 這個檔案之中的。

__init__.py 檔案:

__init__.py 控制著包的匯入行為。假如 __init__.py 為空,那麼僅僅匯入包是什麼都做不了的。

>>> import package1>>> package1.module1traceback (most recent call last): file "", line 1, in ?  package1.module1attributeerror: 'module' object has no attribute 'module1'

我們需要在 __init__.py 裡把 module1 預先匯入:

#檔案 __init__.pyimport module1

測試:

>>> import package1>>> package1.module1

__init__.py 中還有乙個重要的變數,叫做 __all__。我們有時會使出一招「全部匯入」,也就是這樣:

from packagename import *

這時 import 就會把註冊在包 __init__.py 檔案中 __all__ 列表中的子模組和子包匯入到當前作用域中來。比如:

#檔案 __init__.py__all__ = ['module1', 'module2', 'package2']

測試:

>>> from package1 import *>>> module2

__init__.py 檔案會在匯入時被執行。

Python模組包中 init

在eclipse中用pydev開發python指令碼時,我遇到了乙個這樣的現象,當我新建乙個pydev package時,總會自動地生成乙個空的 init py檔案,因為是python新手,所以很不了解這個空檔案的作用是什麼,因為沒有什麼東西可寫在這裡,所以我直接把這個檔案給刪掉了,結果我的包圖示自...

Python模組包中 init

在eclipse中用pydev開發python指令碼時,我遇到了乙個這樣的現象,當我新建乙個pydev package時,總會自動地生成乙個空的 init py檔案,因為是python新手,所以很不了解這個空檔案的作用是什麼,因為沒有什麼東西可寫在這裡,所以我直接把這個檔案給刪掉了,結果我的包圖示自...

Python模組包中 init

原文 本人有刪改 參考 python packages init py 包的精髓在 init py 這個檔案 init py 檔案 init py 控制著包的匯入行為。假如 init py 為空,那麼僅僅匯入包是什麼都做不了的。import package1 package1.module1 tra...