python中__init__文件的作用

本文介绍了Python中__init__.py的重要作用,如激活模块包、简化导入操作和封装功能。讲解了如何通过__init__.py导入模块、from import的区别,并提到了__all__变量的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目的:控制包的导入行为
简单来说:python程序运行时,__init__.py文件会将当前目录(文件夹)激活为module(模块包),其他模块引用此package模块时会自动加载运行该__init__.py文件,便于开发人员在__init__.py中做一些初始化操作。


目录中的__init__.py文件作用:将当前整个文件夹当作一个包来管理,每当有外部import的时候,就会自动执行里面的函数。
(1)标识该目录是一个python的模块包
(2)简化模块导入操作
(3)功能的封装和细节隐藏

 

对于第2点详细说明,假定现在项目结构如下:

package1
    -> __init__.py
    -> model1.py
    -> model2.py
    -> model3.py
package2
    -> utils.py
run.py

那么,如果程序需要在多个py文件多次使用到package1时,这时可以直接在package1.__init__.py中提前导入需要的各个py模块,也可以对相关功能函数起别名提供统一访问函数,实际使用时只需导入package1即可,避免了频繁的导入package1中的各个模块。
  

可以被import语句导入的对象是以下类型:

  •     模块文件(.py文件)
  •     C或C++扩展(已编译为共享库或DLL文件)
  •     包(包含多个模块)
  •     内建模块(使用C编写并已链接到Python解释器中)

在导入模块时,解释器做以下工作:

  1.     以导入模块的名称创建新的命名空间,通过该命名空间可以访问导入模块的属性和方法。
  2.     在[新创建的命名空间]中执行源代码文件。
  3.     创建一个名为源代码文件的对象,该对象引用模块的名字空间,这样就可以通过这个对象访问模块中的函数及变量

        
可以在程序中使用import多次导入同一个模块,但模块代码仅在该模块首次导入时执行,后面import语句只是简单的创建一个到模块名字空间的引用而已    
    
import直接导入和from import导入的区别:    
使用from语句可以把[模块]直接导入[当前命名空间],from语句并不引用导入[对象的命名空间],而是将[被导入对象]直接引入[当前命名空间]

 

此外,在__init__.py定义__all__变量,用以限定需要导入的的属性、方法、类。

 

-- over --

Python中,`__init__.py`文件是一个特殊的文件,用于将一个目录标识为一个Python包。它可以是一个空文件,也可以包含包的初始化代码和变量。以下是`__init__.py`文件的一些主要用途和功能: 1. **标识包**:当一个目录中包含`__init__.py`文件时,Python会将其识别为一个包。这允许你使用`import`语句导入该包中的模块。 2. **初始化代码**:可以在`__init__.py`文件中编写初始化代码,这些代码在包被导入时会自动执行。这对于设置包的初始状态或导入子模块非常有用。 3. **导出接口**:通过在`__init__.py`文件中定义`__all__`列表,可以指定包中哪些模块或对象可以被导入。这有助于控制包的公共接口。 4. **子包导入**:可以在`__init__.py`文件中导入子包或子模块,使得用户可以通过顶级包名直接访问这些子包或子模块。 以下是一个简单的示例,展示了如何使用`__init__.py`文件: 假设有一个名为`mypackage`的包,其结构如下: ``` mypackage/ __init__.py module1.py module2.py ``` 在`__init__.py`文件中,可以这样编写: ```python # __init__.py # 导入子模块 from . import module1 from . import module2 # 定义__all__列表,指定公共接口 __all__ = ['module1', 'module2', 'function1', 'Class1'] # 从子模块中导入函数和类 from .module1 import function1 from .module2 import Class1 ``` 这样,用户可以通过以下方式导入包中的内容: ```python import mypackage # 使用子模块 mypackage.module1.function1() # 使用从__init__.py中导入的函数和类 mypackage.function1() instance = mypackage.Class1() ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值