前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python 中 __init__.py 的作用

python 中 __init__.py 的作用

作者头像
狼啸风云
发布于 2023-10-07 07:04:14
发布于 2023-10-07 07:04:14
3050
举报

基本概念

概念

解释

import

即导入,方式就是在import位置将代码文件拷贝过去。

模块

python中一个.py文件就是一个模块

指软件包,举例import matplotlib.pyplot中(其中pyplot非函数,至少是一个模块或者包),matplotlib就是一个软件包。

先上结论

__init__.py的作用是让一个呈结构化分布(以文件夹形式组织)的代码文件夹变成可以被导入import的软件包。

举例解释

为了形象地解释,我建立了一个test文件夹,其中一个文件夹A打算建立成一个软件包,然后尝试在B文件夹的的run.py文件下导入A包中的模块。

实验一:不包含__init__.py

test文件夹中包含的文件如下: 

此时如果在B/run.py中运行以下语句的结果为:

语句

运行结果

import A

ImportError: No module named A

import A.A_A

ImportError: No module named A.A_A

import A.A_B

ImportError: No module named A.A_B

结论:此时A并不能被当成是一个软件包。

实验二:A中包含__init__.py

A文件夹下包含__init__.pytest文件夹结构变为如下: 

B/run.py中运行以下语句的结果依次列在表中:

语句

运行结果

import A

成功

import A.A_A

ImportError: No module named A_A

import A.A_B

成功

结论:由A.A_B能被成功import看出此时A已经是一个软件包,因为A下的.py文件已经能够程序识别出来。但是由于A下的A_A还不是一个软件包,所以A.A_A还不能被导入。

实验三:A.A_A中也包含__init__.py

A文件夹及其子文件夹下都包含__init__.pytest文件夹结构变为如下: 

B/run.py中运行以下语句的结果依次为:

语句

运行结果

import A.A_B

成功

import A.A_A

成功

import A.A_A.A_A_A

成功

结论:此时A及其子文件夹A_A都成功变成软件包,其中的模块可以被任意导入。

进阶

  • 在上述实验中,发现导入A时并未将其下的子模块自动导入,当__init__.py文件不为空时,其中可以填写from . import A_A类似语句实现自动子模块导入。
  • 不含有__init__.py的包也可以当作命名空间包使用,使命名一致的包被统一管理。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档