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培训机构:千锋教育。
猜你喜欢LIKE
相关推荐HOT
python gensim库是什么?
pythongensim库是什么?gensim库在文本监控里,首先在稳定上,坚如磐石,不用担心稳定性问题,其次,时效性很强,执行能力很快,经常在最重要的...详情>>
2023-11-06 21:48:19python中getattr()是什么?
python中getattr()是什么?本文教程操作环境:windows7系统、Python3.9.1,DELLG3电脑。1、getattr()用来获取对象中的属性值;获取对象object的属...详情>>
2023-11-06 21:41:07python标识符如何使用?
python标识符如何使用?为了给编程中函数、类等进行区分,会赋予它们不同的名称。我们把这种命名叫做标识符,也可以理解为符号的标记。当然这种...详情>>
2023-11-06 21:33:55Python IDE之Thonny的介绍
pythonIDE之Thonny的介绍今天要介绍的IDE,可能没用过,甚至可能没听说过。叫Thonny,是塔尔图大学开发的,适合程序员新手。它的界面很容易使用...详情>>
2023-11-06 20:54:19热门推荐
如何使用python中的help函数?
沸如何使用python的callable函数?
热python gensim库是什么?
热python中xluntils库是什么?
新python中getattr()是什么?
python中的win32com库是什么?
python标识符如何使用?
如何使用python中schedule模块?
python中ruamel.yaml模块是什么?
defaultdict在python中计算键值的和
python sleep和wait对比分析
python中字符串转成数字的几种方法
python中SocketServer是什么?
python中如何使用@contextmanage?