1. 程式人生 > >Python包中 __init__.py檔案的作用

Python包中 __init__.py檔案的作用

原創連線

https://www.cnblogs.com/AlwinXu/p/5598543.html

Python包中 __init__.py檔案的作用

在建立python包的過程中,IDE都會在包根目錄下建立一個__init__.py檔案,該Python檔案預設是空的.目錄結構如下:

Pycharm下的package樹結構:

在Finder中的目錄結構:

從Finder中的目錄就可以看出來,每個package實際上是一個目錄(Directory),那麼IDE是怎麼識別它為package呢?沒錯,__init__.py的第一個作用就是package的標識,如果沒有該檔案,該目錄就不會認為是package。

Python中的包和模組有兩種匯入方式:精確匯入和模糊匯入:

精確匯入:

from Root.Pack1 import Pack1Class

import Root.Pack1.Pack1Class

模糊匯入:

from Root.Pack1 import *

模糊匯入中的*中的模組是由__all__來定義的,__init__.py的另外一個作用就是定義package中的__all__,用來模糊匯入,如__init__.py:

__all__ = ["Pack1Class","Pack1Class1"]

在包外部呼叫:

from Root.Pack1 import *

a = Pack1Class.Pack1_AA("Alvin") a.PrintName()

__init__.py首先是一個python檔案,所有還可以用來寫python模組,但是不建議這麼寫,儘量保證__init__.py足夠輕:

__init__.py:

複製程式碼
__all__ = ["Pack1Class","Pack1Class1","Init_AA"] class Init_AA: def __init__(self,name): self.name = name def Greeting(self): print("Hello ",self.name)
複製程式碼

在測試中呼叫:

from Root.Pack1 import *

b = Init_AA("test") b.Greeting()

 

總結:

從上邊的例子可以看出,__init__.py的主要作用是:

1. Python中package的標識,不能刪除

2. 定義__all__用來模糊匯入

3. 編寫Python程式碼(不建議在__init__中寫python模組,可以在包中在建立另外的模組來寫,儘量保證__init__.py簡單)