返回到文章

采纳

编辑于 12天前

__init__.py介绍

python

__init__.pyPython 包(package)机制的关键文件。简单来说,它的作用就是 把一个目录变成 Python 可以识别的包,从而允许你用 import 来导入其中的模块。

1. 基础作用

  • 在 Python 早期版本(3.3 以前),如果目录里没有 __init__.py,那它就只是普通文件夹,不能当作包导入。
  • 有了 __init__.py,Python 解释器会把这个目录当作一个

举个例子:

project/
    mypkg/
        __init__.py
        module1.py
        module2.py

你就能写:

import mypkg.module1

如果没有 __init__.py,就会报错。

2. 文件内容

__init__.py 本身 可以是空的,但也可以写代码。

常见用途有:

  1. 包初始化逻辑:在导入包的时候执行,比如加载配置、检查依赖。
  2. 控制包的导出内容:通过 __all__ 定义哪些模块/函数可以被 from mypkg import * 导入。

    __all__ = ["module1", "module2"]
    
  3. 简化导入路径:在 __init__.py 里直接导入子模块,这样用户用起来更方便。

    from .module1 import func1
    from .module2 import func2
    

    这样就能:

    from mypkg import func1, func2
    

3. Python 3.3 之后的变化

  • Python 3.3 引入了 隐式命名空间包(namespace package),即使没有 __init__.py,也能把目录当作包。
  • 但在实际项目里,__init__.py 依然很常见,主要是:

    • 提高兼容性(对旧 Python 版本)。
    • 便于组织代码和控制导入。

4. 类比理解

可以把 __init__.py 看成 包的门卫

  • 如果门卫不存在(Python 3.2 以前),这个“房子”(目录)进不去。
  • 有了门卫,你进门的时候还能顺便做点事(初始化、导出、封装)。