Python模組包中 init

2021-04-28 20:00:57 字數 1519 閱讀 9156

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

原來在python模組的每乙個包中,都有乙個__init__.py檔案(這個檔案定義了包的屬性和方法)然後是一些模組檔案和子目錄,假如子目錄中也有 __init__.py 那麼它就是這個包的子包了。當你將乙個包作為模組匯入(比如從 xml 匯入 dom )的時候,實際上匯入了它的 __init__.py

檔案。乙個包是乙個帶有特殊檔案 __init__.py

的目錄。__init__.py

檔案定義了包的屬性和方法。其實它可以什麼也不定義;可以只是乙個空檔案,但是必須存在。如果 __init__.py

不存在,這個目錄就僅僅是乙個目錄,而不是乙個包,它就不能被匯入或者包含其它的模組和巢狀包。

_init__.py 檔案:

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

>>>

import package1

>>> package1.module1

traceback (most recent call last):

file "d:/work space/python practice/mypractice/src/test.py", line 8, in

aa=package1.module1

attributeerror: 'module' object has no attribute 'module1'

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

#檔案 __init__.py

import module1

測試:

>>> import package1

>>> aa=package1.module1

>>> print aa

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

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

#檔案 __init__.py

__all__ = ["module1", "module2", "subpackage1", "subpackage2"]

測試:

>>>

from package1 import *

test1111111111111111111111

test222222

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

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...

Python模組包中 init

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