Python __init__.py作用详解
前面章节中,已经对包的创建和导入进行了详细讲解,并提供了大量的实例,这些实例虽然可以正常运行,但存在一个通病,即为了调用包内模块的成员(变量、函数或者类),代码中包含了诸多的 import 导入语句,非常繁琐。
要解决这个问题,就需要搞明白包内 __init__.py 文件的作用和用法。
我们知道,导入包就等同于导入该包中的 __init__.py 文件,因此完全可以在 __init__.py 文件中直接编写实现模块功能的变量、函数和类,但实际上并推荐大家这样做,因为包的主要作用是包含多个模块。因此 __init__.py 文件的主要作用是导入该包内的其他模块。
也就是说,通过在 __init__.py 文件使用 import 语句将必要的模块导入,这样当向其他程序中导入此包时,就可以直接导入包名,也就是使用
上节中,我们已经创建好的 first_package 包,该包名包含 module1 模块、module2 模块和 __init__.py 文件。现在向 first_package 包的 __init__.py 文件中编写如下代码:
第 1 种方式用于导入当前包(模块)中的指定模块,这样即可在包中使用该模块。当在其他程序使用模块内的成员时,需要添加“包名.模块名”作为前缀,例如:
第 2 种方式表示从指定模块中导入所有成员,采用这种导入方式,在其他程序中使用该模块的成员时,只要使用包名作为前缀即可。例如如下程序:
要解决这个问题,就需要搞明白包内 __init__.py 文件的作用和用法。
我们知道,导入包就等同于导入该包中的 __init__.py 文件,因此完全可以在 __init__.py 文件中直接编写实现模块功能的变量、函数和类,但实际上并推荐大家这样做,因为包的主要作用是包含多个模块。因此 __init__.py 文件的主要作用是导入该包内的其他模块。
也就是说,通过在 __init__.py 文件使用 import 语句将必要的模块导入,这样当向其他程序中导入此包时,就可以直接导入包名,也就是使用
import 包名
(或from 包名 import *
)的形式即可。上节中,我们已经创建好的 first_package 包,该包名包含 module1 模块、module2 模块和 __init__.py 文件。现在向 first_package 包的 __init__.py 文件中编写如下代码:
# 从当前包导入 module1 模块 from . import module1 #from .module1 import * # 从当前包导入 module2 模块 #from . import module2 from .module2 import *可以看到,在 __init__.py 文件中用点(.)来表示当前包的包名,除此之外,from import 语句的用法和在程序中导入包的用法完全相同。
总的来说,__init__.py 文件是通过如下 2 种方式来导入包中模块的:有关 from...import 语句的用法,可阅读《Python创建包,导入包》一节详细了解。
# 从当前包导入指定模块 from . import 模块名 # 从.模块名 导入所有成员到包中 from .模块名 import *
第 1 种方式用于导入当前包(模块)中的指定模块,这样即可在包中使用该模块。当在其他程序使用模块内的成员时,需要添加“包名.模块名”作为前缀,例如:
import first_package first_package.module1.display(20)运行结果为:
20
第 2 种方式表示从指定模块中导入所有成员,采用这种导入方式,在其他程序中使用该模块的成员时,只要使用包名作为前缀即可。例如如下程序:
import first_package item = first_package.Item() item.display()运行结果为:
调用模块中类的方法
所有教程
- socket
- Python基础教程
- C#教程
- MySQL函数
- MySQL
- C语言入门
- C语言专题
- C语言编译器
- C语言编程实例
- GCC编译器
- 数据结构
- C语言项目案例
- C++教程
- OpenCV
- Qt教程
- Unity 3D教程
- UE4
- STL
- Redis
- Android教程
- JavaScript
- PHP
- Mybatis
- Spring Cloud
- Maven
- vi命令
- Spring Boot
- Spring MVC
- Hibernate
- Linux
- Linux命令
- Shell脚本
- Java教程
- 设计模式
- Spring
- Servlet
- Struts2
- Java Swing
- JSP教程
- CSS教程
- TensorFlow
- 区块链
- Go语言教程
- Docker
- 编程笔记
- 资源下载
- 关于我们
- 汇编语言
- 大数据
- 云计算
- VIP视频