Python __init__.py 模块详解

2023-11-04

1 概述

1. 工具: Pycharm
   场景: 在创建一个 Python Package 时,会默认在该包下生成一个 '__init__.py' 文件

2. 目的: '进行一些 初始化 操作'
   (1)import package 时,"自动" 执行 '__init__.py' 文件中的内容
   (2) 常用于导入模块

2 导入演示

2.1 执行顺序:先父后子

目录结构:
在这里插入图片描述
目录结构简化:

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
执行完成
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python __init__.py 模块详解 的相关文章

随机推荐

  • php 基于ICMP协议实现一个ping命令

    php 基于ICMP协议实现一个ping命令 网络协议是什么 ICMP 协议 什么是ICMP ICMP 的主要功能 ICMP 在 IPv4 和 IPv6 的封装 Wireshark抓包 ICMP 请求包分析 PHP构建 ICMP 数据包 p
  • FileInputStream 和 FileOutputStream

    1 什么是流 流是一连串流动的字符 是一组有序的数据序列 是以先进先出方式发送信息的通道 将数据从一个地方带到另一个地方 在 java 中所有数据都是使用流读写的 同时可以通过流进行文件的读写操作 2 流的分类 按照流向 可以分为输入流和输
  • 设计模式之访问器模式(Visitor)的C++实现

    1 访问器模式的提出 在软件开发过程中 早已发布的软件版本 由于需求的变化 需要给某个类层次结构增加新的方法 如果在该基类和子类中都添加新的行为方法 将给代码原有的结构带来破坏 同时 也违反了修改封闭 扩展开放的原则 访问器模式可以实现不改
  • Jira项目管理

    目录 需求管理 项目权限管理 sql jira看板设计 sprint需求看板 ALL需求看板 sprint研发看板 需求管理 版本 创建面板 创建 修复版本 只能管理同一个项目下的需求集 Epics 史诗 可以管理跨项目 有不同项目关键字
  • java常混淆知识,Java中==和equals区别

    在Java语言中 和equals都是用来比较两个对象是否相等的操作符 但是它们的比较方式和比较结果有所不同 操作符 操作符用于比较两个对象的引用是否相等 即这两个对象是否是同一个对象的引用 如果两个对象的引用相同 则返回true 否则返回f
  • scala学习-11-package object

    1 概述 Scala 2 8提供包对象 package object 的新特性 什么是包对象呢 按我的理解 根据Scala 一切皆对象 设计哲学 包 package 也是一种对象 既然是对象 那么就应该有属性和方法 也可以在包对象内声明某个
  • Sublime Text3 快速格式化代码

    英文版 打开Sublime软件 PreFerences gt Key Bindings User 如图 添加代码 keys alt shift f command reindent 保存即可 alt shift f 可以自己改为任意键的组合
  • 深入学习jquery源码之is()与not()

    深入学习jquery源码之is 与not is expr obj ele fn 概述 根据选择器 DOM元素或 jQuery 对象来检测匹配元素集合 如果其中至少有一个元素符合这个给定的表达式就返回true 如果没有元素符合 或者表达式无效
  • three.js ThreeBSP(多个模型组合:差集、交集、并集 附带demo) - 05

    文章目录 一 什么是模型运算 1 函数属性介绍 2 代码示例 二 模型组合demo 需要在我的第一节中找到对应的库 或者私信我 2 代码效果 2 1并集效果 2 2 差集效果 2 3 交集效果 一 什么是模型运算 我所理解的ThreeBSP
  • InfluxDB 的 InfluxQL 基本介绍与使用

    前言 本文主要介绍 InfluxDB 的 InfluxQL 的基本概念与用法并且包含了一些需要注意的点 由于 InfluxDB 2 x 不使用 InfluxQL 进行查询 如您的版本大于 2 x 请查找其他资料 主要为以下内容 SELECT
  • Linux-升级CMake版本(Ubuntu18.4)

    一 简介 在一些场景中 因为CMake版本过低而无法编译 此时就需要升级CMake的版本 二 升级 卸载 先卸载旧的cmake sudo apt get autoremove cmake 安装 切换文件夹 cd usr src 下载cmak
  • 数据结构-第三章 栈和队列

    Stack and Queue 栈和队列是逻辑上的结构 在物理上可以用数组和链表来实现 1 栈 A stack is a list in which insertions and deletions take place at the sa
  • 逆向爬虫31 某站刷播放

    逆向爬虫31 某站刷播放 目标 利用爬虫模拟某站视频播放 增加视频的播放量 思考 正常用户是如何为视频增加播放量的 进入视频播放页 点击播放按钮 视频开始播放 就会增加一个播放量 因此我们只需要模拟点击播放按钮时 浏览器对服务器发送的数据包
  • python 字符串True,False转换成布尔值True,False

    字符串True False转换成布尔值True False不能用bool函数 因为得到的结果都是布尔值True 可以写个if判断 if ss True ss True elif ss False ss False
  • MySQL基本命令

    登录mysql hhostname Pport uusername p 比如 mysql hlocalhost P3306 uroot p 主机名 端口号 用户名 密码 同一台服务器上前两个省略 显示所有数据库 show databases
  • zabbix监控nginx状态界面

    文章目录 开启状态界面 监控nginx状态界面 开启状态界面 实例 开启status location status stub status on off allow 172 16 0 0 16 deny all 访问状态页面的方式 htt
  • 编译工具 Ninja 介绍

    什么是Ninja Ninja是使用C 写的开源项目 http martine github io ninja 在Unix Linux下通常使用Makefile来控制代码的编译 但是Makefile对于比较大的项目有时候会比较慢 看看上面那副
  • (手工)【sqli-labs26、26a】拼接注入、过滤后注入

    目录 推荐 一 手工 SQL注入基本步骤 二 Less25 GET Error based All your SPACES and COMMENTS belong to us 2 1 简介 过滤 报错回显 2 2 第一步 注入点测试 2 3
  • 性能测试浅谈

    早期的性能测试更关注后端服务的处理能力 一个用户去访问一个页面的请求过程 如上图 数据传输时间 当你从浏览器输入网址 敲下回车 开始 真实的用户场景请不要忽视数据传输时间 想想你给远方的朋友写信 信件需要经过不同的交通运输工具送到朋友手上
  • Python __init__.py 模块详解

    文章目录 1 概述 2 导入演示 2 1 执行顺序 先父后子 2 2 导入所有模块 含子模块 1 概述 1 工具 Pycharm 场景 在创建一个 Python Package 时 会默认在该包下生成一个 init py 文件 2 目的 进