包是构建许多包和模块的一种方式,有助于形成组织良好的数据集层次结构,使目录和模块易于访问。就像操作系统中有不同的驱动器和文件夹来帮助我们存储文件一样,软件包也可以帮助我们存储其他子软件包和模块,以便用户在必要时使用。
创建和探索软件包
为了告诉Python一个特定的目录是一个包,我们创建了一个名为_init__的文件。py,然后将其视为一个包,我们可以在其中创建其他模块和子包。这个______;。py文件可以留空,也可以使用包的初始化代码进行编码。 要用Python创建包,我们需要遵循以下三个简单步骤:
- 首先,我们创建一个目录并给它一个包名,最好与它的操作相关。
- 然后我们把类和必需的函数放进去。
- 最后,我们创建一个_init__;。py文件,让Python知道该目录是一个包。
创建包的示例
让我们看看这个例子,看看如何创建一个包。让我们创建一个名为Cars的包,并在其中构建三个模块,即宝马、奥迪和日产。
- 首先,我们创建一个目录并将其命名为Cars。
- 然后我们需要创建模块 .为此,我们需要创建一个名为Bmw的文件。py并通过将此代码放入其中来创建其内容。
# Python code to illustrate the Modules
class
Bmw:
# First we create a constructor for this class
# and add members to it, here models
def
__init__(
self
):
self
.models
=
[
'i8'
,
'x1'
,
'x5'
,
'x6'
]
# A normal print function
def
outModels(
self
):
print
(
'These are the available models for BMW'
)
for
model
in
self
.models:
print
(
' %s '
%
model)
然后我们创建另一个名为Audi的文件。py并向其添加具有不同成员的类似类型的代码。
# Python code to illustrate the Module
class
Audi:
# First we create a constructor for this class
# and add members to it, here models
def
__init__(
self
):
self
.models
=
[
'q7'
,
'a6'
,
'a8'
,
'a3'
]
# A normal print function
def
outModels(
self
):
print
(
'These are the available models for Audi'
)
for
model
in
self
.models:
print
(
' %s '
%
model)
然后我们创建另一个名为日产的文件。py并向其添加具有不同成员的类似类型的代码。
# Python code to illustrate the Module
class
Nissan:
# First we create a constructor for this class
# and add members to it, here models
def
__init__(
self
):
self
.models
=
[
'altima'
,
'370z'
,
'cube'
,
'rogue'
]
# A normal print function
def
outModels(
self
):
print
(
'These are the available models for Nissan'
)
for
model
in
self
.models:
print
(
' %s '
%
model)
- 最后,我们创建_init__;。py文件。 该文件将放在Cars目录中,可以留空,也可以将初始化代码放入其中。
from
Bmw
import
Bmw
from
Audi
import
Audi
from
Nissan
import
Nissan
现在,让我们使用我们创建的包。为此,制作一个样品。在Cars软件包所在的同一目录中创建py文件,并向其添加以下代码:
# Import classes from your brand new package
from
Cars
import
Bmw
from
Cars
import
Audi
from
Cars
import
Nissan
# Create an object of Bmw class & call its method
ModBMW
=
Bmw()
ModBMW.outModels()
# Create an object of Audi class & call its method
ModAudi
=
Audi()
ModAudi.outModels()
# Create an object of Nissan class & call its method
ModNissan
=
Nissan()
ModNissan.outModels()
访问软件包的各种方式
让我们看看这个例子,尝试将包与它联系起来,以及如何访问它。
- 包装进口 假设汽车和品牌目录是软件包。要使它们成为一个包,它们都必须包含_init__;。其中的py文件,要么为空,要么带有一些初始化代码。让我们假设所有的汽车模型都是模块。使用包有助于单独或整体导入任何模块。 假设我们想要宝马i8。其语法如下:
'import' Cars.Bmw.x5
在导入一个包或子包或模块时,Python会搜索整个目录树以查找特定的包,并按照点运算符的编程进行系统化处理。 如果任何模块包含一个函数,我们想导入它。例如,a8有一个函数get_buy(1),我们想导入它,语法是:
import Cars.Audi.a8 Cars.Audi.a8.get_buy(1)
在使用导入语法时,必须记住最后一个属性必须是子包或模块,而不应该是任何函数或类名。
- 包装中的“从…导入” 现在,每当我们需要使用这样的函数时,我们都需要在导入父包后编写整个长行。为了以更简单的方式解决这个问题,我们使用“from”关键字。为此,我们首先需要使用“from”和“import”引入模块:
from Cars.Audi import a8
现在我们可以使用
a8.get_buy(1)
还有另一种方式,它不那么冗长。我们可以直接导入该函数,并在必要时使用它。首先使用以下方法导入:
from Cars.Audi.a8 import get_buy
现在从任何地方调用函数:
get_buy(1)
- 包装中的“从…导入*” 在使用 从…进口 语法,我们可以将任何东西从子模块导入到同一模块中定义的类、函数或变量。如果导入部分中提到的属性没有在包中定义,那么编译器会抛出ImportError异常。 导入子模块可能会导致显式导入子模块时出现不必要的副作用。因此,我们可以使用*语法一次性导入各种模块。语法是:
from Cars.Chevrolet import *
这将从子包中导入所有内容,即模块、子模块、函数、类。
本文由 金莫伦卡 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 贡献极客。组织 或者把你的文章寄到contribute@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。
如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。
- 包装进口 假设汽车和品牌目录是软件包。要使它们成为一个包,它们都必须包含_init__;。其中的py文件,要么为空,要么带有一些初始化代码。让我们假设所有的汽车模型都是模块。使用包有助于单独或整体导入任何模块。 假设我们想要宝马i8。其语法如下: