__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