python包中__init__.py文件的作用
__init__.py文件最常用的作用是標識一個文件夾是一個 python包。
__init__.py文件的另一個作用是定義模糊導入時要導入的內容。
當我們使用類似 from package import *
的導入語句的時候就是在使用模糊導入了,這時包的編寫者就可以在__init__.py文件中定義 __all__
來限制模糊導入的內容。
這樣可以避免將一些只在包內使用的方法或變量暴露給用戶。
__init__.py還可以簡化導入過程,比如:
Django中的 models文件有時會有很多個表,並且每個表都有很多的屬性和方法,這樣就會使得 models文件變得很臃腫。
所以我們會把創建一個 models包,在這個包里每個表都單獨用一個 py文件來保存,但是這樣在導入的時候會有一些麻煩。
現在假設我們有一個 User表,按照上面我們的方法我們有一個 models文件夾,文件夾里有一個 User.py文件,這個文件里保存着我們的 User表的類。
這樣當我們在其他文件導入 User類時的導入語句就是 from app.models.User import User
但是我們更習慣原來的寫法 from app.models import User
。
這時我們就可以在 models里的 __init__.py文件中導入 User類,這樣我們就可以使用原來的寫法來導入User類了。
# models.__init__.py from .User import User