我们创建包时,会看到同步生成了__init__.py文件,对它不理解的我们就会认为是多余的,甚至将其删除。估计大家和我一样,做过这样的傻事吧!为了下次不再误删,那么就让我们一起来学习下吧~
1 . __init__.py作用
__init__.py :定义了包的属性和方法,它的存在告诉我们这是一个包。当然它也可以什么都不定义,甚至内容为空;但是必须要存在这么一个文件。包可以像目录一样,有多个层级,当然每个层级都可存在__init__.py,这样就会形成多层级的嵌套包了。
ps:如果没有__init__.py ,则表明其只为目录,不叫包,也不能被导入了。
2. 导入方式
import XX
from XX import XX
我们导入模块(包)的时候,实际上是在导入__init__.py文件;如果我们在这个包下创建了多个.py文件后,但只想使用该包下的某一模块,可以在__init__.py文件里通过__ all__= [ '模块名'] 添加指定的模块。
![](https://img.haomeiwen.com/i12246218/16fb99fb4f8ccfee.jpg)
Base包下,有mock和runmethod两个模块,在init__.py文件里,只让其他包导入runmethod这个模块;在Main包下,通过from Base import * 导入init__.py里配置的所有模块,有且仅有runmethod模块。
![](https://img.haomeiwen.com/i12246218/649b229a2727d491.jpg)
PS : *代表所有
![](https://img.haomeiwen.com/i12246218/0c60b93bc8b2ae9c.jpg)
3 . 补充
__init__.py还如类里的构造函数一样,起着初始化的作用。
运行run_test.py,结果打印hello world.
![](https://img.haomeiwen.com/i12246218/3d48a41d0ee97387.jpg)
![](https://img.haomeiwen.com/i12246218/6078940ae313aa7e.jpg)
网友评论