文件__init__.py的目的是要包含不同运行级别的包的可选的初始化代码。 举个例子,如果你执行了语句import graphics, 文件graphics/__init__.py将被导入,建立graphics命名空间的内容。像import graphics.format.jpg这样导入,文件graphics/__init__.py和文件graphics/graphics/formats/__init__.py将在文件graphics/formats/jpg.py导入之前导入。
绝大部分时候让__init__.py空着就好。但是有些情况下可能包含代码。 举个例子,__init__.py能够用来自动加载子模块:
# graphics/formats/__init__.py from . import jpg from . import png
像这样一个文件,用户可以仅仅通过import grahpics.formats来代替import graphics.formats.jpg以及import graphics.formats.png。
我做了个实验,我的目录结构是这样的:
├── graphics
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-35.pyc
│ │ ├── jpg.cpython-35.pyc
│ │ └── png.cpython-35.pyc
│ ├── jpg.py
│ └── png.py
└── main.py
代码如下:
main.py
import graphics
print(graphics.jpg.b)
print(graphics.png.a)
from . import jpg
from . import png
jpg.py
b = 20
png.py
a = 10
运行 python main.py,输出
20
10
如果把__init__.py里的内容删掉,则会报错。