在python3.3之前,没有__init__.py文件的话一个文件夹中.py文件不能下面一样引入此文件夹下的另外一个文件夹下的文件
一个目录如果包含了__init__.py文件,那么他就变成了一个包(package)。
__init__可以是空的,但是必须存在,其他程序才能从这个目录中导入相应的模块或函数。
例如data文件夹下有__init__.py,则在main.py中就可以from data.dataset import
所以在numpy、pandas中会看到__init__.py文件
在python3.3后就没必要加入__init__.py也可以向上面一样使用
在python3.3之前时必须要加__init__.py,在python3.3之后推荐使用,原因有两点:
1、能够简化引用
使用__init__py之前,go_home.py引入方式
使用__init__py之后,go_home.py引入方式,可以看到from 后面直接跟things就可以导入
这样有什么好处呢?只是简单的将导入时候的名字缩短吗?当然不是,更好的方面是我们在进行导入操作时不需要知道eat()是哪个文件内的,在以后things这个包在改动时,假设将eat()这个函数移除fun.py文件放在另外一个文件中时,在__init__.py文件中有上面那句话,我们在引入时依旧可以使用 from things import eat,所以此种方式对代码的封装以及使用是很有好处的。
当然如果没在__init__.py加入上述形式的代码就必须在引入是加入文件名后缀了,from things.fun import eat
2、引入提示工作
3、还可以在__init__.py中添加通用方法
原文:https://www.cnblogs.com/zhjblogs/p/14741549.html