Python中的__init__.py文件

来源:千锋教育
发布时间:2023-11-06 17:42:18
分享

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培训机构:千锋教育。

声明:本站部分稿件版权来源于网络,如有侵犯版权,请及时联系我们。

相关推荐

  • Python增强 Python自身的已有的一些功能可以随着标准库的使用而得到增强。1)文字处理Python的string类提供了对字符串进行处理的方法。更进一步,通过标准库中的re包,Python可以用正则表达式(re
  • Python自定义模块导入方法 Python模块是一个Python文件,以.py结尾,包括了Python对象定义和Python语句,能让Python代码段更有逻辑性、更好用、更易懂,既然Python模块有这么多好处,那么该如何引用P
  • 用Python+OpenCV实现自动扫雷 相信许多人很早就知道有扫雷这么一款经典的游(显卡测试)戏(软件),更是有不少人曾听说过中国雷圣,也是中国扫雷第一、世界综合排名第二的郭蔚嘉的顶顶大名。扫雷作为一款在Windows9x时代就已经诞生的经
  • python unittest控制用例的执行顺序 为什么要进行顺序控制呢?使用过testng的同学就知道,它相对于junit来说有更强大的功能,其中的一个功能就是依赖测试。什么是依赖测试呢?简单的说一下就是,A方法运行时,其中有个变量的取值是B方法的
  • Python使用装饰器在执行单元测试时配置环境 装饰器的定义是给一个对象动态加载功能,就像打游戏时给队友上buff一样。一直以来,我对装饰器用的不多,经常会用别的方式搞定,虽然代码丑一点,但也能用。这次遇到一个特别适合装饰器的应用场景,就是执行单元
  • Python的Unittest单元测试使用详解 PytheM是一个Python渗透测试框架。它只能在osnGNU/LinuxOS系统上运行。安装$sudoapt-getupdate$sudoapt-getinstalllibasound-devli