Python中__init__.py文件深入理解

news2025/5/30 14:46:29

Python中文件__init__.py深入理解

  • 1. 简介
    • 1.1 模块(Module)和包(Package)的概念
    • 1.2 `__init__.py`文件简介
  • 2. `__init__.py`内容写法
    • 2.1 `__init__.py`文件内容
    • 2.2 `__init__.py`内容解释

1. 简介

1.1 模块(Module)和包(Package)的概念

模块是程序,任何Python程序都可以作为模块导入。写在脚本.py文件中的函数,比如xx.py,可以在另一个模块或者脚本中通过import xx进行导入。如果要导入xx.py中的函数yy,就写成from xx import yy。可见模块可以简单的理解为一个.py文件。

包就是模块所在的目录。和文件夹不同的是,包的根目录下存在__init__.py。一个文件夹根目录下存在__init__.py那就会认为该文件夹是Python包,否则那这个文件夹就是一个普通的文件夹。

1.2 __init__.py文件简介

__init__.py文件的作用是将文件夹变为一个Python的包,Python中每个包中,都有__init__.py文件。通常__init__.py文件为空,但是我们还可以为它增加其他的功能。我们在导入一个包时,实际上是导入了它的__init__.py文件。这样我们可以在__init__.py文件中批量导入我们所需要的模块,而不再需要一个一个的导入。

2. __init__.py内容写法

2.1 __init__.py文件内容

以PySolid代码为例。PySolid包的目录结构如下:

.
├── grid.py
├── point.py
└── __init__.py

__init__.py内容:

# top-level functions
from pysolid.grid import (
    calc_solid_earth_tides_grid,
    plot_solid_earth_tides_grid,
)
from pysolid.point import (
    TIDES,
    calc_solid_earth_tides_point,
    plot_solid_earth_tides_point,
    plot_power_spectral_density4tides,
)

__all__ = [
    '__version__',
    'calc_solid_earth_tides_grid',
    'plot_solid_earth_tides_grid',
    'TIDES',
    'calc_solid_earth_tides_point',
    'plot_solid_earth_tides_point',
    'plot_power_spectral_density4tides',
]

在这里插入图片描述

2.2 __init__.py内容解释

从grid.py中导入两个函数:

 calc_solid_earth_tides_grid
 plot_solid_earth_tides_grid

从point.py中导入四个函数:

TIDES,
calc_solid_earth_tides_point
plot_solid_earth_tides_point
plot_power_spectral_density4tides

__init__.py中通过定义__all__变量来控制外部调用者能够调用的范围,除了以下列表中的函数,其它函数都无法被使用,类似于私有函数或变量。

__all__ = [
    '__version__',
    'calc_solid_earth_tides_grid',
    'plot_solid_earth_tides_grid',
    'TIDES',
    'calc_solid_earth_tides_point',
    'plot_solid_earth_tides_point',
    'plot_power_spectral_density4tides',
]

参考:
[1] 深入理解 __init__.py的作用
[2] 关于Python项目文件夹里建立__init__.py的理解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/334781.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

这是从零在独自开开发,将是副业赚钱最好的平台!

文章目录最重要的事情放前面1.前言2.简单介绍一下3.【独自开】介绍3.1 分层标准化平台架构3.2 集成第三方数字接口3.3 支持各个行业的系统定制开发4.如何在【独自开】赚钱获取收益?4.1 如何称为【独自开】开发者?最重要的事情放前面 通过平台的审核也可以得到相应的奖金&…

信息系统建设和服务能力等级证书(CS)

2019年11月26日,中国电子信息行业联合会发布了《信息系统建设和服务 能力评估体系 能力要求》(简称《能力要求》)。《能力要求》是我国信息系统建设和服务能力领域的首个团体标准,旨在通过该标准的实施提升信息系统建设和服务行业…

Linux学习之冯诺依曼体系结构

目录冯诺伊曼结构体系基本概念冯诺依曼结构分为五个部分组成冯诺依曼结构体系的各部分的读写特点:从软件数据上认识冯诺依曼结构体系冯诺伊曼结构体系 基本概念 数学家冯诺依曼提出了计算机制造的三个基本原则,即采用二进制逻辑、程序存储执行以及计算机…

JVM相关面试题

文章目录说一下 JVM 的主要组成部分及其作用?说一下 JVM 运行时数据区 ?JVM中哪些是线程共享区 ?说一下堆栈的区别?队列和栈是什么?有什么区别?简述Java类加载机制?说一下类装载的执行过程?什么…

类的 6 个默认成员函数

文章目录一、构造函数1. 构造函数的定义2. 编译器生成的构造函数3. 默认构造函数4. 初始化列表5. 内置成员变量指定缺省值(C11)二、析构函数1. 析构函数的定义2. 编译器生成的析构函数3. 自己写的析构函数的执行方式三、拷贝构造函数1. C语言值传递和返回值时存在 bug2. 拷贝构…

2023上半年软考中级报名-系统集成项目管理工程师

系统集成项目管理工程师是全国计算机技术与软件专业技术资格(水平)考试(简称软考)项目之一,是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试,既属于国家职业资格考试,又是职…

【Hello Linux】 Linux基础命令(持续更新中)

作者:小萌新 专栏:Linux 作者简介:大二学生 希望能和大家一起进步! 本篇博客简介:介绍Linux的基础命令 Linux基础命令ls指令lsls -als -dls -ils -sls -lls -nls -Fls -rls -tls -Rls -1总结思维导图pwd指令whoami指令…

已解决:pywintypes.com_error: (-2147221005, ‘无效的类字符串‘, None, None)

今天接到一个需求,就是读取doc文件, 注意是doc! doc! doc, 不是docx! 不是docx! 不是docx! 以下的博客都是挂羊头,卖狗肉 但是好多博客都是读取docx,以次来博取流量与眼球,还有好多我都用不了&#xff0…

做产品时有哪些常见的错误认知?

作为产品新人最容易遗漏的就是一些小的细节,有时候可能脑子里想过,可因为事情繁冗又遗漏了某些环节,导致项目不顺利。 产品经理就像是全托幼儿园的唯一一个老师,想要做的好就要管的多且全面,将自己的位置放的低一点多…

centos7环境安装单机版MinIo后台自启动

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录MinIo简介一、搭建MinIo1. Linux服务器执行命令,查看当前系统2. 执行对应版本的minIo下载命令3. 下载完毕,执行启动服务命令4. minIo 启动成功…

08讲 | 基于STM32单片机NBIOT定位实战项目

前言 绘制基于 STM32 单片机的 NBIOT 实战开发板。 文章目录前言一、原理图1、绘制1)电源供电a、USB 转 TTL 电路b、锂电池充电管理电路c、3.3V电压转换电路d、一键开关机电路2)单片机最小系统3)ADC电压转换电路4)NBIOT 模组串口电…

Resin内存马逆袭之路

前言 故事还是要从很久很久以前说起,红蓝对抗越来越激烈,常见的免杀Webshell文件已经逃脱不了蓝队大佬的火眼金睛了,函数混淆的花里胡哨最后还是能被轻松分析,所以早在很多年前,就已经进入了内存马的时代,…

细讲一个 TCP 连接能发多少个 HTTP 请求(一)

一道经典的面试题是从 URL 在浏览器被被输入到页面展现的过程中发生了什么,大多数回答都是说请求响应之后 DOM 怎么被构建,被绘制出来。但是你有没有想过,收到的 HTML 如果包含几十个图片标签,这些图片是以什么方式、什么顺序、建…

Android主页面进程卡死黑屏怎么办?多线程机制来解决

问题描述 在做一个页面跳转小案例,在输入页输入要计算第几项斐波那契数列,然后跳转到另一个页面显示计算的结果,当输入的值很大时,跳转到另一个页面时,页面卡死黑屏。 页面卡死黑屏问题原因 计算斐波那契数列的常规方法…

Linux--fork

一、fork入门知识 fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。可以简单地说fork()的作用就是创建一…

如何在Python里使用ChatGPT及ChatGPT是什么?怎么注册?

废话不多说,直接开干! 需要库 pip install openaiimport openai# Set your API keyopenai.api_key "你的chatgpt的密钥key"# Use the GPT-3 modelcompletion openai.Completion.create(engine"text-davinci-002",prompt"Once upon …

纯CSS实现[喵咪小挂件]

效果预览 网页上: 小程序中: 在微信小程序中使用时,将div标签改成view即可。 小程序中封装 如下,在小程序中可封装成组件(方便使用) 1、先在components目录下新建一个目录存放该组件。 2、右键上一步…

Unity-ROS与激光雷达小车搭建(五)

0. 简介 我们在第三章和第四章中详细介绍了如何使用URDF以及Navigation 2,而第五章开始我们将学习如何将前面所学的结合起来,来形成一个Unity与ROS完整且系统的框架 1. 创建并导入URDF 这一部分作为我们第三讲的内容,我们在之前的基础上通…

【STL】综述

STL,一文即可知 文章目录一、STL基本知识概述容器二、序列式容器详述数组容器array向量容器vector双端队列容器deque链式容器list正向链容器forward_list参考博客😊点此到文末惊喜↩︎ 一、STL基本知识 概述 STL六大组件(前三个是主要的&am…

在线支付系列【21】微信支付服务商接入前准备

有道无术,术尚可求,有术无道,止于术。 文章目录项目概述接入准备1. 注册服务商号(获取服务商mchid)2. 注册公众号(获取服务商APPID)3. 绑定应用ID和服务商ID4. 入驻子商户(特约商户进…