__init__.py文件最常用的作用是標(biāo)識(shí)一個(gè)文件夾是一個(gè) python包丈屹。
__init__.py文件的另一個(gè)作用是定義模糊導(dǎo)入時(shí)要導(dǎo)入的內(nèi)容祟敛。
當(dāng)我們使用類似 from package import *
的導(dǎo)入語句的時(shí)候就是在使用模糊導(dǎo)入了,這時(shí)包的編寫者就可以在__init__.py文件中定義 __all__
來限制模糊導(dǎo)入的內(nèi)容。
這樣可以避免將一些只在包內(nèi)使用的方法或變量暴露給用戶督惰。
__init__.py還可以簡(jiǎn)化導(dǎo)入過程,比如:
Django中的 models文件有時(shí)會(huì)有很多個(gè)表蕉堰,并且每個(gè)表都有很多的屬性和方法,這樣就會(huì)使得 models文件變得很臃腫悲龟。
所以我們會(huì)把創(chuàng)建一個(gè) models包屋讶,在這個(gè)包里每個(gè)表都單獨(dú)用一個(gè) py文件來保存,但是這樣在導(dǎo)入的時(shí)候會(huì)有一些麻煩须教。
現(xiàn)在假設(shè)我們有一個(gè) User表皿渗,按照上面我們的方法我們有一個(gè) models文件夾,文件夾里有一個(gè) User.py文件轻腺,這個(gè)文件里保存著我們的 User表的類乐疆。
這樣當(dāng)我們?cè)谄渌募?dǎo)入 User類時(shí)的導(dǎo)入語句就是 from app.models.User import User
但是我們更習(xí)慣原來的寫法 from app.models import User
。
這時(shí)我們就可以在 models里的 __init__.py文件中導(dǎo)入 User類贬养,這樣我們就可以使用原來的寫法來導(dǎo)入U(xiǎn)ser類了挤土。
# models.__init__.py
from .User import User