python的 __init__.py文件中使用__all__变量

news2024/11/20 8:41:59

在Python的包(Package)中,init.py文件可以被用作初始化包的脚本。这个文件会在包被导入时自动执行。同时,init.py文件中的__all__变量也可以被用来限制包中可导入的模块、类或方法。具体来说,__all__变量应该是一个列表或元组,包含了包中公开的API。

在Python中,通过在导入语句中使用from package import *的方式,可以将一个包中所有可导入的模块、类或方法全部导入到当前命名空间中。但是,这种方式会将包中所有未公开的API也一起导入,可能会导致不必要的命名冲突、资源浪费和代码污染等问题。

因此,在__init__.py文件中使用__all__变量可以控制导入的API。如果__all__变量不存在,则from package import *语句会导入所有可见的名称。如果__all__变量存在,则只会导入__all__变量中指定的名称。

例如,假设我们有一个名为my_package的包,其中包含两个模块module1和module2。如果我们只想公开module1中的MyClass类,并防止其他的API被导入,我们可以在__init__.py文件中添加如下代码:

__all__ = ['MyClass']
from .module1 import MyClass

这样,当其他人使用from my_package import *时,只会导入MyClass类,而module2中的其他API不会被导入,从而确保了代码的简洁性、可读性和健壮性。

示例
├── my_package
│ ├── init.py
│ ├── module1.py
│ ├── module2.py

└── test.py

# __init__.py

__all__ = ["MyClass", "my_function"]

from .module1 import MyClass
from .module2 import my_function

module1.py

class MyClass:
    
    def my_method(self):
        print("Hello, I'm an instance of MyClass!")

module2.py

def my_function():
    print("Hello from my_function!")

test.py

from my_package import *

my_object = MyClass()
my_object.my_method()   # Output: "Hello, I'm an instance of MyClass!"
my_function()

在这里插入图片描述
这里使用 pydoc用来确认模块是否生成导入成功

pydoc是Python自带的一个文档生成工具,可以生成Python代码的文档。pydoc可以为Python模块、类和函数生成文档,并以各种格式(如HTML、text、man等)显示文档。

以下是一些常见的pydoc使用方法:

显示模块的文档:在终端中运行pydoc module_name,其中module_name是要查看文档的模块的名称。例如,要查看math模块的文档,可以运行pydoc math。

显示函数的文档:在终端中运行pydoc module_name.function_name,其中module_name是包含要查看文档的函数的模块的名称,function_name是要查看文档的函数的名称。例如,要查看math模块中的sin函数的文档,可以运行pydoc math.sin。

生成HTML格式的文档:在终端中运行pydoc -w module_name,其中module_name是要生成文档的模块的名称。例如,要为math模块生成HTML格式的文档,可以运行pydoc -w math。生成的文档将保存在当前目录下的module_name.html文件中。

显示pydoc的帮助:在终端中运行pydoc -h。

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

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

相关文章

项目上线 | 兰精携手盖雅工场,数智驱动绿色转型

近年来,纺织纤维行业零碳行动如火如荼。作为低碳环保消费新时尚引领者,同时也是纤维领域隐形冠军,兰精在推进绿色发展的同时,也在不断向内探索企业数字化转型之道,以此反哺业务快速扩张。 数智转型,管理先…

计算机网络面试题(上)

1.TCP/IP 网络模型有哪几层? TCP/IP 网络通常是由上到下分成 4 层,分别是应用层,传输层,网络层和网络接口层。 每一层的封装格式: 网络接口层的传输单位是帧(frame),IP 层的传输单位…

探究肺癌患者的CT图像的图像特征并构建一个诊断模型

目标效果图操作说明代码 目标 探究肺癌患者的CT图像的图像特征并构建一个诊断模型 效果图 操作说明 代码中我以建立10张图为例,多少你自己定 准备工作: 1.准备肺癌或非肺癌每个各10张图,在本地创建一个名为“data”的文件夹,用…

【Docker】什么是Dockerfile

文章目录 1、认识DockerFile2、DockerFile的构建过程3、DockerFile常用指令4、实战:构建自己的centos5、CMD和ENTRYPOINT的区别6、DockerFile制作tomcat镜像7、发布镜像到DockerHub8、发布镜像到阿里云 1、认识DockerFile Dockerfile是用来构建docker镜像的文件&am…

arduino stm32 开发环境 解决方案

用到工具 hfs.exe 做文件服务器 来模拟所有需要下载的文件 https://download.csdn.net/download/qq_32562225/87754346 其原理就相当于 本应arduinoIDE 下载的文件,先手动通过迅雷工具下载下来,然后再添加到文件服务器中,这样就可以快速…

爬虫想要的HTML

我的个人博客主页:如果’真能转义1️⃣说1️⃣的博客主页 关于Python基本语法学习---->可以参考我的这篇博客:《我在VScode学Python》 接下来回更新一个关于urllib的文章 爬虫一个新浪博客地址 import urllib.requestpage 1 url [" "] *…

如何在线录制视频?教您一个简单的方法!

案例:怎样实现在线录屏? 【听朋友说在线录屏更加便捷,我也想学习如何在线录制电脑屏幕。有没有小伙伴有在线录屏的经验,求好心人给一个简单的方法!】 在今天的数字时代,我们经常需要录制电脑屏幕来制作教…

【C++】AVL树的插入实现(详解旋转机制)

✍作者:阿润菜菜 📖专栏:C 文章目录 AVL树的定义AVL树的旋转机制1.左旋操作 --- 新节点插入较高右子树的右侧---右右:左单旋2.右旋操作 --- 新节点插入较高左子树的左侧——左左:右单旋3.左右双旋 --- 新节点插入较高左…

JMeter开发自动化接口测试脚本练习

一、打开浏览器代理服务器设置 我这里用的是360浏览器,打开浏览器代理服务器设置,端口要与jmeter中的端口设置保持一致哦。 二、JMeter设置代理 JMeter设置代理(jmeter中的端口要与360浏览器端口设置保持一致哦。) 三、启动代理运…

BM6 判断链表中是否有环

判断链表中是否有环_牛客题霸_牛客网 (nowcoder.com) 双指针,快指针一次走两步,慢指针一次走一步,快指针不为空且快指针的下一个指针不为空的情况下 若快慢指针相遇即位有环。 /** * Definition for singly-linked list. * struct ListNode {…

基于RK3588的8K智能摄像机方案设计

设计了一款基于石墨烯散热的8 K智能摄像头,主控采用瑞芯微RK3588,传感器采用索尼IMX435, 通过HDMI2.1将传感器采集到的图像发送到8 K显示器,实现端到端的8 K呈现,为了确保摄像头性能稳定,本 设计采用石墨烯…

ETL到底是什么?

各位数据的朋友,大家好,我是老周道数据,和你一起,用常人思维数据分析,通过数据讲故事。 前段时间和大家聊了一个话题,就是为什么要用构建数据仓库,而不是直连数据源的方式开发报表?通…

七、MyBatis自定义映射resultMap

文章目录 七、自定义映射resultMap7.1 resultMap处理字段和属性的映射关系7.2 多对一映射处理级联方式处理映射关系使用association处理映射关系分步查询 7.3 一对多映射处理collection分步查询 本人其他相关文章链接 七、自定义映射resultMap 注意:下面两行表看看…

公司新来的00后真是卷王,工作没2年,跳槽到我们公司起薪18K都快接近我了

说00后躺平了,但是有一说一,该卷的还是卷。这不,前段时间我们公司来了个00后,工作都没两年,跳槽到我们公司起薪18K,都快接近我了。后来才知道人家是个卷王,从早干到晚就差搬张床到工位睡觉了。 …

分布式光伏发电大规模应用,运维难题如何解?

国家能源局数据显示,2022年我国光伏新增装机达 87.4GW,同比59%,其中:集中式装机达36.29GW,同比41.8%;分布式装机达51.11GW,同比207.9%,已连续两年超过集中式电站。 近年来&#xff…

如何在Windows系统中恢复丢失的分区?

有些时候,您突然发现自己的分区丢失,并且无法在Windows文件资源管理器中看到它,进入磁盘管理工具,丢失的分区也将被显示为额外的未分配空间,而不是原始分区。如果您遇到了与上述案例类似的情况,某个分区丢失…

AntDB数据库受邀参加第六届上海人工智能大会,分享AIGC时代核心交易系统升级方案

近日,第六届上海人工智能大会春季论坛圆满落幕。大会以“数智互联,瞰见未来”为主题,邀请了来自国内外十余个国家和地区的学术界顶级学者和业内知名企业的技术大咖,探讨人工智能的学术、人才、技术、行业发展痛点。亚信科技AntDB数…

新闻月刊 | GBASE 4月市场动态一览

产品动态 4月,GBASE南大通用大规模分布式并行数据库GBase 8a MPP Cluster中标人保财险“2022年基础软件产品及服务采购”项目。这是自2019年GBASE与人保财险达成合作以来支持建设的第三期项目。项目上线后,将极大满足人保财险大数据中心及研发中心的增量…

学网络安全怎么挖漏洞?怎么渗透?

前言 有不少阅读过我文章的伙伴都知道,我从事网络安全行业已经好几年,积累了丰富的经验和技能。在这段时间里,我参与了多个实际项目的规划和实施,成功防范了各种网络攻击和漏洞利用,提高了安全防护水平。 也有很多小…

css div上下左右排序

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>div上下左右排序</title> </head> <style>.div-box {display: grid;grid-auto-flow: column; /* 排序方式&#xff1a; column-先列…