--- title: Init And Package fid: 20251024-201400 tags: init, package --- # 学生实验: `init.py` 的作用 (date: 2025-10-24) 难度: 入门级 时长: 15 分钟 ## 实验目的 理解 `__init__.py` 文件如何让Python将文件夹识别为包 ## 实验步骤 ### 1. 创建文件结构 ``` my_experiment/ ├── package_A/ │ ├── __init__.py │ └── module_a.py ├── package_B/ │ └── module_b.py └── test.py ``` ### 2. 创建文件内容 **module_a.py** ```python def say_hello(): print("Hello from package A!") ``` **module_b.py** ```python def say_hello(): print("Hello from package B!") ``` **test.py** ```python print("=== 开始实验 ===") print("1. 测试有 __init__.py 的包:") from package_A import module_a print("✅ 成功导入 package_A") module_a.say_hello() print("\n2. 测试没有 __init__.py 的文件夹:") from package_B import module_b print("✅ 成功导入 package_B") module_b.say_hello() print("=== 实验结束 ===") ``` ### 3. 执行实验 1. 创建以上文件和文件夹 2. 在命令行运行: ```bash cd my_experiment python test.py ``` ## 预期结果和现象 程序会在第二处导入时报错并停止执行: ``` === 开始实验 === 1. 测试有 __init__.py 的包: ✅ 成功导入 package_A Hello from package A! 2. 测试没有 __init__.py 的文件夹: Traceback (most recent call last): File "test.py", line 10, in from package_B import module_b ModuleNotFoundError: No module named 'package_B' ``` ## 实验结论 - **有 `__init__.py`**:Python将文件夹识别为包,可以正常导入 - **无 `__init__.py`**:Python不识别为包,导入时报错停止 - `__init__.py` 是包的"身份证",告诉Python这是一个包 ## 扩展实验 在 package_B 中创建一个空的 `__init__.py` 文件,重新运行程序,观察变化。