1 概述
1. 工具: Pycharm
场景: 在创建一个 Python Package 时,会默认在该包下生成一个 '__init__.py' 文件
2. 目的: '进行一些 初始化 操作'
(1) 当 import package 时,"自动" 执行 '__init__.py' 文件中的内容
(2) 常用于导入模块
2 导入演示
2.1 执行顺序:先父后子
目录结构:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210114164722806.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_5Y2a5a6i77ya6bG85Li45Li257KX6Z2i,size_16,color_FFFFFF,t_70)
目录结构简化:
demo
sub_pkg1
'__init__.py' # 2
sub_pkg2
'__init__.py' # 3
'init__.py' # 1 注意,和 demo 同级哦
demo2
'init__.py' # 效果演示
测试语句:
# 1. 按 demo 中目录结构顺序依次输出一句话
print("父 package:demo") # 1
print("子 package:sub_pkg1") # 2
print("子 package:sub_pkg2") # 3
# 2. 在 demo2 中的 __init__.py 导入上述所有模块,并运行
from demo import sub_pkg1, sub_pkg2
# from demo import * # 特别注意:这种写法,仅导入 demo,但未导入 子 pkg
# 解决办法:参考 2.2 导入所有模块(含子模块)
print("执行完成")
测试结果:(先执行 父 _init_.py,在按导入的顺序执行 子 _init_.py)
父 package:demo
子 package:sub_pkg1
子 package:sub_pkg2
执行完成
2.2 导入所有模块(含子模块)
方法:在 父模块的 __init__.py
中,导入所有子模块,用两种形式(实质一样)
形式1:
# 1. 将上述 demo 中的 # 1 中的 __init__.py 修改如下
from demo import sub_pkg1, sub_pkg2
print("父 package:demo")
# 2. 将上述 demo2 中的 __init__.py 修改如下,并运行
from demo import *
print("执行完成")
测试结果:
子 package:sub_pkg1
子 package:sub_pkg2
父 package:demo # 按顺序执行的结果,若将 print 放入第一行,则最先执行
执行完成
形式2:(实质,推荐)
# 1. 将上述 demo 中的 # 1 中的 __init__.py 修改如下
print("父 package:demo")
__all__ = ['sub_pkg1', 'sub_pkg2']
# 2. 将上述 demo2 中的 __init__.py 修改如下,并运行
from demo import *
print("执行完成")
测试结果:
父 package:demo
子 package:sub_pkg1
子 package:sub_pkg2
执行完成