Skip to content

包的概念

在 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()