Python中__init__.py的作用及实验
要搞懂__init__.py的作用,需要先弄清楚 Python 里的 模块 和 包 这两个概念。
模块(module)
模块(module):简单来说,就是一个 .py 文件,里面写了一些函数、类或者变量。
比如,有个叫 math_basic.py 的文件,里面有一堆数学工具函数,那它就是个模块。
模块的基本用法,示例如下。
math_basic.py 的内容是:
def add(a, b):return a + bdef subtract(a, b):return a - b
然后,就可以在别的 Python 文件如 测试.py里这样用它:
import math_basic
print(math_basic.add(3, 5)) # 输出 8
Python 包(package)
如果你写的模块越来越多,代码量越来越大,就得想办法组织它们。这时候,Python 里的 包(package) 就派上用场了。
包(package):一个 文件夹,里面包含多个模块(.py 文件)。
在 Python 3.3 之前,如果要让一个目录被识别为 Python 包,必须在里面创建 __init__.py 文件。但从 Python 3.3 开始,即使没有 __init__.py,Python 也能识别它是一个包(称为“命名空间包”——不含__init__.py的文件夹)。
大部分实际项目 依然建议添加 __init__.py,因为它可以:
☆明确这个文件夹是一个包,避免某些工具(如打包工具)识别错误。
☆允许在包初始化时执行特定代码,比如自动导入子模块。
☆让导入行为更加可控,避免意外的命名冲突。
比如,咱们有个 math_units 目录,里面放了几个数学相关的模块:
也就是,math_units 文件夹中,含有三个py文件,其中basic.py 和 advanced.py是两个模块。basic.py内容见前面。advanced