Python中的__init__.py文件

发布时间:2022-04-12 10:04:44 人气:60 作者:多测师

  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之前,这个文件必须存在,否则就会报错,因为它不认为目录是有效的模块。

Python中的__init__.py文件

  现在,在dir1和dir2下分别创建空文件__init__.py:

  type nul>d:pypathdir1__init__.py

  type nul>d:pypathdir1dir2__init__.py

  现在目录的层次格式如下:

  λ tree /f d:pypath

  D:PYPATH

  └─dir1

  │ __init__.py

  └─dir2

  mod.py

  __init__.py

  再去执行导入操作,并输出包dir1和dir2。

  >>> import dir1.dir2.mod

  mod.py

  >>> dir1

  >>> dir1.dir2

  >>> dir1.dir2.mod

  从输出结果中不难看出,包dir1和dir1.dir2是模块,且它们的模块文件是各自目录下的__init__.py。

  实际上,包分为两种:名称空间模块、普通模块。名称空间包是没有__init__.py文件的,普通包是有__init__.py文件的。无论是哪种,它都是模块。

  以上内容为大家介绍了Python中的__init__.py文件,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注多测师。https://www.e70w.com/xwzx/




返回列表
在线客服
联系方式

热线电话

17727591462

上班时间

周一到周五

二维码
线