在建立python包的过程当中,IDE都会在包根目录下建立一个__init__.py文件,该Python文件默认是空的.目录结构以下:python
Pycharm下的package树结构:测试
在Finder中的目录结构:spa
从Finder中的目录就能够看出来,每一个package其实是一个目录(Directory),那么IDE是怎么识别它为package呢?没错,__init__.py的第一个做用就是package的标识,若是没有该文件,该目录就不会认为是package。code
Python中的包和模块有两种导入方式:精确导入和模糊导入:blog
精确导入:it
from Root.Pack1 import Pack1Class import Root.Pack1.Pack1Class
模糊导入:class
from Root.Pack1 import *
模糊导入中的*中的模块是由__all__来定义的,__init__.py的另一个做用就是定义package中的__all__,用来模糊导入,如__init__.py:test
__all__ = ["Pack1Class","Pack1Class1"]
在包外部调用:import
from Root.Pack1 import * a = Pack1Class.Pack1_AA("Alvin") a.PrintName()
__init__.py首先是一个python文件,全部还能够用来写python模块,可是不建议这么写,尽可能保证__init__.py足够轻:im
__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简单)