python模块化设计核心是高内聚、低耦合:按功能拆分模块(如user_service.py)、避免大杂烩utils.py、用抽象接口(abc/protocol)隔离实现、依赖注入解耦、配置外置、通信通过参数/事件而非直接调用。

Python代码解耦和模块化设计的核心是“高内聚、低耦合”——每个模块职责单一,依赖明确,通过接口通信而非直接调用内部实现。
按功能边界拆分模块
把系统按业务或技术职责划分为独立模块,例如用户管理、订单处理、数据持久化、日志记录等。每个模块封装完整能力,对外只暴露必要函数或类。
- 避免“大而全”的utils.py:把字符串处理、时间转换、网络请求混在一起,后期难以定位和复用
- 推荐命名方式:user_service.py(业务逻辑)、user_repository.py(数据访问)、user_schema.py(数据结构定义)
- 模块间不跨层调用:比如 Web 层不应直接操作数据库连接,而是通过 repository 接口
用抽象接口隔离实现
定义清晰的协议(Protocol)或抽象基类(ABC),让上层模块依赖接口,而非具体类。这样替换实现(如从 SQLite 换成 PostgreSQL)时,调用方无需修改。
CPWEB企业网站管理系统(以下称CPWEB)是一个基于PHP+Mysql架构的企业网站管理系统。CPWEB 采用模块化方式开发,功能强大灵活易于扩展,并且完全开放源代码,面向大中型站点提供重量级企业网站建设解决方案。CPWEB企业网站管理系统 2.2 Beta 测试版本,仅供测试,不建议使用在正式项目中,否则发生任何的后果自负。
- 示例:定义UserRepository抽象类,含get_by_id()、save()方法;再分别实现SqliteUserRepo和PostgresUserRepo
- 调用方只导入并使用UserRepository类型注解,运行时注入具体实例
- 配合依赖注入(如dependency-injector库或手工传参)可进一步降低硬编码依赖
合理使用配置与环境分离
把数据库地址、API密钥、开关标志等外部可变参数抽离到配置文件或环境变量中,模块内部不写死值。
立即学习“Python免费学习笔记(深入)”;
- 创建config.py,用os.getenv()或pydantic-settings加载配置
- 模块初始化时接收配置对象(如DatabaseConfig),而不是在函数里自己读os.environ['DB_URL']
- 测试时可传入内存数据库配置,生产用真实连接,无需改业务代码
控制跨模块通信方式
模块之间尽量避免直接导入对方的内部函数或全局状态。优先使用参数传递、回调函数、事件通知或消息队列。
- 不要在order_service.py里直接调用notification.send_email();改为接受一个notify: Callable[[str, str], None]作为参数
- 对异步或解耦要求高的场景,可用blinker或python-event-bus发事件,由监听器响应
- 避免循环导入:A模块导入B,B又导入A → 拆出公共接口模块,或延迟导入(如函数内import)









