python的__init__.py
在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 <module> 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__.py 作用Python
- __init__.py
- python中的__init__.py檔案和導包總結Python
- 你常常看到的 __init__.py 到底是個啥?
- python ----python的安裝Python
- python:python的多程式Python
- 【Python】python類的繼承Python繼承
- 【python】Python 3 的新特性Python
- 與 Python 之父聊天:更快的 Python!Python
- 『python入門:』 python的介紹Python
- python(python中的super函式、)Python函式
- 學習Python的日子 Python(6)Python
- 【美妙的Python之二】Python初步Python
- python學習: Python的迭代器Python
- Python的包Python
- python的列表[]Python
- python的類Python
- Python的反射Python反射
- python的GCPythonGC
- Python的metaclassPython
- Python的descriptorPython
- Python的基本Python
- Python的SpacyPython
- Python的日常Python
- 「python入門:」python的環境搭配和安裝python的直譯器Python
- Python深入 Python的記憶體管理Python記憶體
- 有趣的Python:Python控制鍵盤滑鼠Python
- Python基礎之:Python中的類Python
- Python基礎之:Python中的IOPython
- Python的容器有哪些?Python課程Python
- 【Python】5.物件導向的PythonPython物件
- 【Python】淺談python中的jsonPythonJSON
- 草根學Python(十)Python 的 Magic MethodPython
- Python 之父談論 Python 的未來Python
- 【美妙的Python之三】Python 物件解析Python物件
- python教程 - 檢視python的可用模組Python
- 【美妙的Python之六】Python函式Python函式
- Python IDLE和Python的區別!Python入門教程Python