包
包
包的概念
在 Python 中,包 package
是用于组织和管理模块 Module
的一种层级结构。
包是一个特殊的目录,其中包含了一个名为 __init__.py
的文件,用于标记这个目录是一个包。
包可以包含其他子包和模块,形成多级层次结构,方便组织和复用代码。
package 用途
- 组织代码:包可以将相关的模块组织在一起,使代码结构更加清晰,有助于代码维护。
- 避免命名冲突:Python 的模块是全局的,当不同的模块中定义了相同名称的函数或变量时,可能会引起命名冲突。使用包可以将模块放在不同的包中,避免冲突。
- 模块复用:包可以作为一个单元来导入和使用,使得代码在不同项目中的复用更加容易。
- 隐藏内部实现:包可以将一些内容实现隐藏起来,只暴露外部接口,提供更好的封装性。
package 导入
从包中导入模块时,导入方式非常灵活。
当前有包组织结构如下:
Project
|
|--- mp
| |
| |--- __init__.py
| |--- mm.py
| | |
| | |--- show()
| |--- nn.py
| | |
| | |--- info()
|--- main.py
-
使用
import
直接导入包中指定模块# 导入指定包内的指定模块 import mp.mm # 使用导入模块中的方法 mp.mm.show() import mp.nn as nn nn.info()
-
使用
from-import
导入包内指定模块或包内指定模块内的成员# 导入包内指定模块 from mp import mm mm.show() # 导入包内指定模块中的成员 from mp.mm import * show()
__init__.py
__init__.py
文件是包的初始化文件,该文件是是区别包与文件夹的关键。
当使用 from-import
方式导入时,可以通过在文件中添加魔法属性 __all__
属性来设置包中哪些模块可以被导入。
# 在 __init__.py 中添加下面代码
__all__ = ["mm"]
# main.py中的代码
from mp import *
# 此时只能使用 __all__ 中指定的mm模块,nn 模块不能使用
mm.show()