Python 包

news/2024/11/28 10:31:42/

简述

通常情况下,在使用电脑的过程中,我们不会把所有的文件都存储在同一个位置,因为这样不便于管理和访问。因此,使用一个组织良好的目录层次结构很有必要。

所谓组织良好,就是将类似的文件保存在同一个目录中。例如,将所有歌曲保存在“音乐”目录中,将所有电影、电视保存在“视频”目录中。。。与此类似,Python 中提供了包和模块的概念,包用于目录,模块用于文件(.py)。

| 版权声明:一去、二三里,未经博主允许不得转载。

包的管理

在开发项目的过程中,随着应用程序的规模越来越大,会有很多模块。这时,需要将类似的模块放在一个包中,并且不同的模块放在不同的包中,这不仅使项目更易于管理,而且在概念上更加清晰。

一个目录可以包含子目录和文件,类似地,一个 Python 包也可以有子包和模块。

为了能让 Python 将目录视为一个包,该目录必须包含一个名为 __init__.py 的文件。该文件可以是空的,也可以包含有效的 Python 代码,这些代码将会在包被导入的时候执行,所以它可以用来初始化一个包,例如:确保其他模块被导入或设置一些值。

来创建一个 Sound 包,其中包含两个模块 play.pypause.py,目录结构如下:

[wang@localhost Game]$ tree Sound
Sound
├── __init__.py
├── pause.py
└── play.py0 directories, 3 files

模块 play.py 的内容为:

def func():print('play...')

模块 pause.py 的内容为:

def func():print('pause...')

__init__.py 文件暂时为空,下面有专门介绍。

包的访问

假设,目录 Sound 位于调用 shell 的目录中,或者包含在搜索路径或环境变量 PYTHONPATH 中。

当从交互式的 Python shell 中导入 Sound 时,看看会发生了什么?

>>> import Sound
>>>
>>> Sound
<module 'Sound' from '/home/wang/workspace/Game/Sound/__init__.py'>
>>> 
>>> Sound/play
...
NameError: name 'play' is not defined
>>> 
>>> Sound/pause
...
NameError: name 'pause' is not defined

可以看到包 Sound 已经被加载了,但是模块 playpause 并没有。

所以,不能仅通过导入 Sound 来访问它们,可以使用下述导入方式:

>>> from Sound import play, pause
>>>
>>> play.func()
play...
>>>
>>> pause.func()
pause...

__init__.py 文件

目前为止,__init__.py 依然为空,那么这个文件究竟是干什么的?

为该文件添加一行简单的代码:

print('Sound is imported...')

导入 Sound,看看会发生什么?

>>> import Sound
Sound is imported...

没错,__init__.py 中的代码被执行了。也就是说,在包导入的时候,会自动执行其包含的 __init__.py 的所有代码。

这样以来,上面的问题又多了一种解决方案,可以使用 __init__.py 自动加载这些模块,将下面的代码添加到该文件中进行初始化:

import Sound.play
import Sound.pause

再次访问 playpause

>>> import Sound
>>> 
>>> Sound.play.func()
play...
>>> 
>>> Sound.pause.func()
pause...

OK,完美运行!


http://www.ppmy.cn/news/141142.html

相关文章

关于包

关于包 包的概念&#xff1a; 它可以当做文件夹来理解 它是管理类的 控制访问权限 引入概念&#xff08;全类名包名类名&#xff09; 作用&#xff1a; 避免类重名 &#xff08;import关键字&#xff09; package day3; /*关键字import 导入外部包的类*/ // import…

手提电脑包工作站,创意无限,国外基础设施真当给力啊

Openaire是一个笔记本电脑包&#xff0c;手提工作站&#xff0c;和一把椅子的混合体。 由Beau和尼克Trincia设计&#xff0c;Openaire由一台笔记本电脑套&#xff0c;作为一个桌子和一个保护外壳&#xff0c;充当椅子的功能。 本文地址&#xff1a;http://fcjblog.com/laptop-b…

Java 包(什么是包?)

包 概念导入包中的类静态导入将类放到包中基本规则操作步骤 包的访问权限控制常见的系统包 概念 包(package) 是组织类的一种方式. 使用包的主要目的是保证类的唯一性. 例如&#xff1a;你在代码中写了一个 Test 类. 然后你的舍友也可能写一个 Test 类. 如果出现两个同名的类,…

包....

1.包的命名与导入 一般使用公司域名作为包名&#xff0c;为了使用某一个包的成员 我们需要在Java中明确导入该包&#xff0c;使用“import”语句 **import package1[.package2…].(classname.|*);**其中 * 代表导入包下所有类. 例&#xff1a; import java.util.Scanner;//…

为什么程序员到哪儿都喜欢背电脑包?

点击上方“程序人生”&#xff0c;选择“置顶公众号” 第一时间关注程序猿&#xff08;媛&#xff09;身边的故事 图片源自花瓣 作者 阿呆 鹰眼米霍克&#xff0c;背上有世界最强的黑刀 砂瀑之我爱罗&#xff0c;背上有自动防御的巨大葫芦 杰富力士&#xff0c;背上有能够自如伸…

大数据教程【01.01】--大数据介绍及开发环境

更多信息请关注WX搜索GZH&#xff1a;XiaoBaiGPT 大数据简介 大数据&#xff08;Big Data&#xff09;是指规模庞大、结构复杂、增长速度快且难以使用传统技术处理的数据集合。大数据分析可以帮助企业和组织从海量的数据中提取有价值的信息&#xff0c;用于业务决策、市场分析、…

如何拍摄家具

产品可视化在几乎所有企业中都至关重要&#xff0c;尤其是电子商务&#xff0c;93%的消费者认为视觉外观是购买决策的关键因素。对于家具公司也是一样的。这是您在市场上建立知名度、吸引潜在客户并让他们购买的方式之一。更不用说如今&#xff0c;客户的要求比以往任何时候都高…

C++进阶 —— 列表初始化(C++11新特性)

目录 一&#xff0c;列表初始化 二&#xff0c;类列表初始化 三&#xff0c;类模板列表初始化 库模板初始化列表实现 模拟模板初始化列表实现 在2003年C标准委员会曾经提交了一份技术勘误表(简称TC1)&#xff0c;使得C03这个名字已经取代了C98称为C11之前的最新C标准名称&…