0

0

Python 模块化设计的边界判断

舞夢輝影

舞夢輝影

发布时间:2026-02-19 16:30:11

|

877人浏览过

|

来源于php中文网

原创

合理模块粒度应以责任边界清晰、import稳定、避免循环依赖和隐式耦合为标准,如auth.py专注凭证与会话,不掺杂邮件发送;禁用utils.py式黑洞;子包用于共享约定或封装实现细节,__init__.py仅声明包并控制导出,不执行业务逻辑;松耦合体现为依赖单向、可独立mock、变更影响可控。

python 模块化设计的边界判断

模块拆分到什么粒度才算合理

模块不是越小越好,也不是按功能名硬切。关键看 import 是否稳定、from ... import 是否频繁引发循环依赖、测试时是否必须连带加载一堆无关逻辑。

实操建议:

  • 一个模块对应一个明确的「责任边界」,比如 auth.py 处理凭证校验和会话管理,但不包含密码重置邮件发送(那是 notifications.py 的事)
  • 如果两个函数总是一起被调用、参数高度耦合、修改一个必改另一个,它们大概率不该拆到不同模块
  • 避免出现 utils.py 这种“啥都往里塞”的模块——它迟早变成隐式依赖黑洞,改一行可能影响三个服务

什么时候该用子包而不是平级模块

当一组模块开始共享内部约定(如共用 _base.py、共用 __all__ 导出规则)、或需要隐藏实现细节(比如把 _parser.py_serializer.py 放进 serializers/ 包,只暴露 serialize()deserialize() 接口)。

常见错误现象:

立即学习Python免费学习笔记(深入)”;

风易在线销售系统
风易在线销售系统

《风易在线销售系统》是一套为企业电子商务项目量身设计打造的在线商业销售系统,本系统将商品管理、客户管理、订单管理、信息管理、界面管理、系统管理等功能无缝融合,并且提供简单易用的后台管理平台,独家首创的模版内核系统,以及诸多实用的辅助模块。为客户提供了一个低成本,高效率,专业化的在线销售建设方案。 【新增】新增后台选择每页显示数据数量。 【新增】新增一个单客服模式功能。 【新增】新增根据一级分类显示

下载
  • models/ 做成包,但里面全是独立的 user.pyorder.py,没定义 __init__.py 导出逻辑,结果外部还得写 from models.user import User —— 这和扁平模块没区别
  • 子包里放了太多顶层接口函数,导致使用者搞不清该导入 pkg.foo() 还是 pkg.submod.bar()
  • 子包之间存在跨包的 from .. import 相对导入,一旦目录结构调整,ImportError: attempted relative import with no known parent package 立刻报错

__init__.py 里该写什么、不该写什么

它的核心作用是声明“这里是个包”,顺便控制对外暴露的接口。不是初始化脚本,也不该承担业务逻辑。

实操建议:

  • 必须有(哪怕空文件),否则 Python 3.3+ 可能忽略该目录为包(尤其在 zipimport 或某些打包场景下)
  • 推荐显式定义 __all__ = ["Client", "connect"],防止 from pkg import * 污染命名空间
  • 禁止在其中调用耗时操作(如读配置、连数据库),因为只要有人 import pkg 就会触发——而这个 import 可能发生在 CLI 启动阶段,拖慢整个命令响应
  • 避免在 __init__.py 里做条件导入(如 if sys.version_info > (3, 8): from typing import Literal),应统一移到具体模块中按需处理

模块间依赖怎么才算“松”

松耦合不是指“没有 import”,而是指依赖方向清晰、变更影响可控。比如 api.py 依赖 service.py 是合理的,但反过来就不行;service.py 依赖 db.py 可以,但如果它还直接 import 了 cache.pymetrics.py,就说明职责过重。

判断依据:

  • 运行 python -m pydeps mypkg --max-bacon=1(需装 pydeps),看依赖图是否出现双向箭头或密集星型结构
  • 尝试 mock 一个模块的依赖:如果为了测 payment.py,你得 patch loggingrequestssettingsuser.py 四个东西,那它大概率太紧了
  • 修改 models.py 中一个字段类型,结果 api.pyadmin.pymigrations/ 全报错——说明模型被到处硬引用,该考虑加一层 repository 或 DTO 隔离
事情说清了就结束。模块边界的本质,是让每次 git blame 时,你能快速定位到“谁该对这个 bug 负责”,而不是翻十来个文件才搞懂数据从哪来、到哪去。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

820

2023.08.22

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1529

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

423

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2260

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

37

2026.01.19

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

419

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

594

2023.08.10

自建git服务器
自建git服务器

git服务器是目前流行的分布式版本控制系统之一,可以让多人协同开发同一个项目。本专题为大家提供自建git服务器相关的各种文章、以及下载和课程。

873

2023.07.05

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

660

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 4.4万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号