Python包中__init__.py文件的作用与用法实例详解

 更新时间:2022年06月27日 16:33:40   作者:Kwoky  
我们新建python包时常常会看到一个__init _.py文件,下面这篇文章主要给大家介绍了关于Python包中__init__.py文件的作用与用法的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

前言

在Python工程中,我们经常可以看到带有“__init__.py”文件的目录,在PyCharm中,带有这个文件的目录被认为是Python的包目录,与目录的图标有不一样的显示。如下图所示, dir_example是一个空白目录,图标是个文件夹图标,而init_example下有_init__.py文件,其图标是一个包。

那么这个文件的作用是什么,我们平时如何使用呢?

一、__init__.py文件简介

Python 定义了两种类型的包,常规包和命名空间包。常规包是传统的包,因为它们存在于 Python 3.2 和更早的版本中。一个常规包通常被实现为一个包含__init__.py 文件的目录。当一个常规包被导入时,这个__init__.py文件被隐式执行,它所定义的对象被绑定到包的名字空间中。

这是Python官方文档中对__init__.py文件的描述,其实它的意思很简单,就是说Python文件都是按照目录当作不同的模块来组织的,这个目录被认为是Python包目录,Python会通过搜索该目录下的文件来导入相关的模块。但是并不是所有的目录都会被搜索添加,只有当目录中包含__init__.py文件时,这个目录才会被Python当作是一个包目录,进而搜索添加里面的文件。这样做可以让编程者自己控制哪些目录可以被Python导入成包。

当某个目录中包含__init__.py文件时,Python在引入这个模块之前,会首先执行这个文件。因此,这个文件也可以被编程者用来控制定义包级别的变量。

综上所述,__init__.py文件最主要的作用是2个:

当目录下包含这个文件时,Python会将其当作成包目录,进而可以使用import xx.xx的方式导入目录下的文件或者模块。

使用__init__.py文件可以控制模块导入时的变量和内容,便于编程者的控制。

下面我们看几个例子即可。

二、__init__.py文件的使用案例

2.1、没有__init__.py文件的目录,使用import xx.xx会报错吗?

看版本,在较低的版本中(如3.2及以下),没有__init__.py文件的目录不能使用import xx.xx导入相关模块,但是后面的版本可以。

2.2、在__init__.py文件中定义变量或者逻辑将在导入时候被执行

例如,我们有如下的目录结构:

init_example/ a_pkg/

                                 __init__.py

                                a.py

                   init_test.py

即init_example工程下有个init_test.py文件和a_pkg目录,a_pkg目录下有__init__.py文件和一个a.py文件。

我们在a_pkg目录下的__init__.py文件定义:

print("Hey, I am a __init__.py file")

那么,如果我们在init_test.py中内容如下:

from a_pkg import *

执行init_test.py我们可以得到如下结果:

Hey, I am a __init__.py file

因为在from a_pkg import *时候,会首先执行a_pkg目录下的__init__.py文件。

2.3、在__init__.py文件中定义变量或者方法,可以被直接导入使用

还是上面的目录,假如我们在a_pkg目录下的a.py定义如下内容:

def a_method():
        print("I am a_pkg!")

在a_pkg目录下的__init__.py文件定义:

from a_pkg.a import a_method

那么,我们在init_test.py中引入a_pkg可以直接引入a_method方法:

from init_example.a_pkg import a_method a_method()

会打印如下内容:

I am a_pkg!

2.4、在__init__.py文件中使用__all__方法

__all__方法可以在__init__.py文件定义一些包或者变量,可以在使用

from init_example.a_pkg import *

时定义*表达的内容。

例如还是上面的内容,但是我们在a_pkg目录下的__init__.py文件定义:

__all__ = ["a"]

那么,我们在init_test.py中使用下面的语句可以引入a模块:

from a_pkg import *
a.a_method()

这时候依然会打印如下内容:

I am a_pkg!

总结

到此这篇关于Python包中__init__.py文件的作用与用法的文章就介绍到这了,更多相关Python包__init__.py文件用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python append、extend与insert的区别

    python append、extend与insert的区别

    这篇文章主要介绍了python append、extend与insert的区别的相关资料,初学者对这几个概念经常搞混,这里就帮大家理清楚,需要的朋友可以参考下
    2016-10-10
  • 安装Anaconda3及使用Jupyter的方法

    安装Anaconda3及使用Jupyter的方法

    这篇文章主要介绍了安装Anaconda3及使用Jupyter的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • python中编写函数并调用的知识点总结

    python中编写函数并调用的知识点总结

    在本篇文章里小编给各位整理的是一篇关于python中编写函数并调用的知识点总结内容,有兴趣的朋友们可以学习下。
    2021-01-01
  • Python拼接字符串的7种方式详解

    Python拼接字符串的7种方式详解

    这篇文章主要介绍了Python拼接字符串的7种方式详解,需要的朋友可以参考下
    2020-02-02
  • python语法 之垃圾回收机制

    python语法 之垃圾回收机制

    这篇文章主要介绍了python语法 之垃圾回收机制,垃圾回收机制 是Python解释器自带一种机,专门用来回收不可用的变量值所占用的内存空间,下文相关介绍,需要的朋友可以参考一下
    2022-04-04
  • python os模块使用方法介绍

    python os模块使用方法介绍

    OS ( Operating System 操作系统 ) 操作系统模块;它是属于python的标准库,常用于处理文件和目录(文件夹)的操作。本文为大家总结了这个模块的常用方法,希望有所帮助
    2022-08-08
  • python游戏的魅力之冒险岛实战项目

    python游戏的魅力之冒险岛实战项目

    我看了一眼沉迷《梦幻国度》的儿子!气就不打一处来!让你见识一下Python游戏的魅力,python实战冒险岛游戏码起,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值
    2021-09-09
  • OpenCV中图像与视频的基础操作总结

    OpenCV中图像与视频的基础操作总结

    在计算机视觉领域,OpenCV是一款广泛使用的开源库,本文为大家介绍了如何使用OpenCV进行这些操作,希望能帮助你更好地掌握图像处理和视觉任务的开发技巧
    2023-06-06
  • Python机器学习之实现模型持久化与加载

    Python机器学习之实现模型持久化与加载

    在实际的机器学习项目中,我们通常需要将训练好的模型保存到磁盘,本文我们会介绍如何在Python中使用pickle和joblib库将训练好的模型持久化到磁盘,需要的可以参考一下
    2023-05-05
  • python多进程并发的实现示例

    python多进程并发的实现示例

    python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程,本文主要介绍了python多进程并发的实现示例,感兴趣的可以了解一下
    2024-02-02

最新评论