假设程序目录结构如下:
├── checkpoints/
├── data/
│ ├── __init__.py
│ ├── dataset.py
│ └── get_data.sh
├── models/
│ ├── __init__.py
│ ├── AlexNet.py
│ ├── BasicModule.py
│ └── ResNet34.py
└── utils/
│ ├── __init__.py
│ └── visualize.py
├── config.py
├── main.py
├── requirements.txt
├── README.md
可以看到,几乎每个文件夹下都有__init__.py,一个目录如果包含了__init__.py 文件,那么它就变成了一个包(package)。
其中__init__.py可以为空,也可以定义包的属性和方法,但其必须存在,其它程序才能从这个目录中导入相应的模块或函数。
例如在data/文件夹下有__init__.py,则在main.py 中就可以
from data.dataset import DogCat
而如果在data/init.py中写入
from .dataset import DogCat
则在main.py中就可以直接写为:
from data import DogCat
或者
import data;
dataset = data.DogCat
相比于from data.dataset import DogCat更加便捷。