Python类与模块关系_层级设计解析【教程】

模块是Python顶层代码组织单元,一个.py文件即一个模块,可包含零个或多个类;类是模块内封装数据和行为的逻辑单元,必须隶属于某模块,不能独立存在。

Python 中的类和模块不是同一层级的概念,模块是组织代码的顶层单位,类是模块内部用来封装数据和行为的结构。理解它们的关系,关键在于“容器层级”:模块包含类(也可能不包含),类不能直接包含模块,但可以导入并使用其他模块。

模块是代码的物理组织单元

一个 .py 文件就是一个模块,它天然具备命名空间,可导出变量、函数、类等。比如 utils.py 是一个模块,里面可以定义多个类(如 DataProcessorConfigLoader),也可以只定义函数或常量。

  • 模块名即文件名(不含 .py),导入时用 import utilsfrom utils import DataProcessor
  • 每个模块有独立的全局作用域,避免命名冲突
  • 模块可嵌套:包(package)是含 __init__.py 的目录,本质是一组相关模块的集合

类是模块内的逻辑抽象单元

类用于建模实体或概念,把属性和方法封装在一起。它必须定义在某个模块中(包括交互式环境里的临时模块 ),不能脱离模块单独存在。

  • 一个模块可定义零个、一个或多个类,无强制数量限制
  • 类可以访问所在模块的全局变量,也可导入其他模块来扩展能力
  • 类本身不是命名空间容器(不像模块),但其实例和类属性构成各自的命名空间

典型层级结构示例

以一个小型数据处理项目为例:

project/
├── __init__.py
├── main.py          # 模块:入口,可能只调用其他模块
├── core/            # 包
│   ├── __init__.py
│   ├── parser.py    # 模块:含 ParseRule 类、parse_text() 函数
│   └── validator.py # 模块:含 DataValidator 类
└── utils/
    ├── __init__.py
    └── helpers.py   # 模块:含 FormatHelper 类、辅助函数
  • parser.py 是模块,其中 ParseRule 是类 —— 类从属于模块
  • core 是包,提供更高层的模块组织,不直接放类,而是通过子模块承载类
  • main.py 可能不定义任何类,只组合使用各模块中的类与函数

设计建议:按职责分离模块,按实体建模类

好的层级设计让代码易定位、易复用、易测试。

  • 一个模块聚焦单一职责(如“日期处理”“HTTP 请求封装”),避免堆砌大量无关类
  • 若某类变得复杂(超 300 行 / 职责发散),考虑拆分为多个类,并放入新模块或子包
  • 避免“大而全”的模块(如 all_in_one.py),也避免“一模块一类”的教条 —— 关联紧密的小类可共存于同一模块
  • 跨模块使用类时,优先通过 from module import Class 显式导入,减少命名污染