Python中的__init__.py文件
推荐
在线提问>>
dir1和dir1.dir2目前是空包,或者说是空模块(再一次强调,包就是模块)。但并不意味着它们对应的模块对象是空的,因为模块是对象,只要是对象就会有属性。例如,dir1包有如下属性:
>>>dir(dir1)
['__doc__','__loader__','__name__','__package__','__path__','__spec__','dir2']
之所以称为空包,是因为它们现在仅提供了包的组织功能,而且它们是目录,而不像py文件一样,是实实在在的可以编写模块代码的地方。换句话说,包现在是目录文件,而不是真正的模块文件。
为了让包"真正的"成为模块,需要在每个包所代表的目录下加入一个__init__.py文件,它表示让这个目录格式的模块(也就是包)像py文件一样可以写模块代码,只不过这些模块代码是写入__init__.py中的。当然,模块文件中允许没有任何内容,所以__init__.py文件也可以是空文件,它仅表示让包成为真正的模块文件。
每次导入包的时候,如果有__init__.py文件,将会自动执行这个文件中的代码,就像模块文件一样,事实上它就是让目录代表的包变成模块的,甚至可以说它就是包所对应的模块文件(见下面示例),所以也可以认为__init__.py是包的初始化文件。在python3.3之前,这个文件必须存在,否则就会报错,因为它不认为目录是有效的模块。
现在,在dir1和dir2下分别创建空文件__init__.py:
typenul>d:pypathdir1__init__.py
typenul>d:pypathdir1dir2__init__.py
现在目录的层次格式如下:
λtree/fd:pypath
D:PYPATH
└─dir1
│__init__.py
└─dir2
mod.py
__init__.py
再去执行导入操作,并输出包dir1和dir2。
>>>importdir1.dir2.mod
mod.py
>>>dir1
>>>dir1.dir2
>>>dir1.dir2.mod
从输出结果中不难看出,包dir1和dir1.dir2是模块,且它们的模块文件是各自目录下的__init__.py。
实际上,包分为两种:名称空间模块、普通模块。名称空间包是没有__init__.py文件的,普通包是有__init__.py文件的。无论是哪种,它都是模块。
以上内容为大家介绍了Python中的__init__.py文件,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注IT培训机构:千锋教育。