关于 python
面向编写或修改 Python 代码的开发者,提供开发规范,涵盖设计、类型标注、架构、测试与实现流程。
主要功能
- 01设计与模块组织原则
- 02命名、文档字符串与类型标注
- 03使用 Protocol 进行依赖注入
- 04使用 Pydantic v2 建模
- 05pytest 测试约定
- 06uv 脚本与单体仓库参考
适用场景
- 01组织 Python 模块与依赖
- 02添加或调整 Python 类型标注
- 03为 Python 代码变更规划测试
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ siviter-xyz/ dot-agent --skill python安装后在 Claude Code 中输入/python确认已加载。
附带文件references/uv-monorepo.mdreferences/uv-scripts.md
详细介绍
Python 指南
Python 开发的标准和最佳实践。编写或修改 Python 代码时,请遵循以下指南。
设计原则
始终贯彻 DRY、KISS 和 SOLID 原则。在适当情况下优先使用函数式方法;对于有状态行为,使用类。使用 Protocol 类进行组合以定义接口,而非继承。每个模块应只负责一项职责。使用依赖注入管理类的依赖项。
代码风格
- 命名:变量、方法和类的名称应具有描述性且简洁
- 文档:为所有类、函数、枚举及枚举值编写文档字符串
- 类型提示:保持一致使用;除非必要,避免使用
Any - 导入:避免在
__init__.py中使用聚合导出;优先使用空文件
类型注解
- 使用
dict、list,而非typing.Dict、typing.List - 使用
str | None,而非Optional[str] - 在包含类型提示的文件顶部添加
from __future__ import annotations - 优先使用内置类型,而非 typing 模块中的对应类型
架构
依赖注入
- 使用类时,始终通过构造函数或方法注入依赖项
- 每个模块只放置一个服务类(此外可以包含接口和类模型)
- 使用 Protocol 类定义接口,以便进行依赖注入和测试
模块组织
- 每个模块专注于一个关注点,并明确划分边界
- 提取可复用的方法,避免重复
- 设计时考虑在不同上下文中的复用性
环境变量
- 使用
environment.py文件,并为每个变量单独提供方法(例如,为API_KEY提供api_key(),为DATABASE_URL提供database_url()) - 将每个包中的所有环境访问操作集中在一处,以便在测试中轻松模拟
数据模型
- 使用 Pydantic v2 定义模式、验证和数据模型
- 利用 Pydantic 的类型验证、序列化和配置管理功能
- 使用 Pydantic 模型定义 API 请求/响应模式、配置对象和数据传输对象
测试
结构
- 测试目录结构应与
src/镜像对应 - 测试方法以
test_开头 - 使用测试类套件:对于
def foo(),创建class TestFoo - 名称应简洁,方法名中省略测试类套件名称
- 修改代码时,始终检查是否需要添加相应的单元测试
质量
- 使用 AAA(Arrange、Act、Assert)模式
- 测试应实用、易读、简洁且易于维护
- 避免编写会产生大量差异或变得难以维护的测试
工具
- 优先使用
pytest,而非unittest - 使用
pytest-mock进行模拟 - 使用
conftest.py存放共享的 fixture - 使用
tests/__test_<package_name>__存放共享测试代码
实现
实现 Python 代码时:
- 确保代码通过类型检查和测试后再提交
- 将相关更改与测试组合成原子提交
- 检查现有工作流模式(先编写规范、TDD 等)并遵循它们
参考资料
- 关于由 uv 管理的项目中的临时 Python 脚本,请参阅
references/uv-scripts.md。 - 关于使用 uv 和 Hatch 的 monorepo 专属模式,请参阅
references/uv-monorepo.md。
评论
支持 Markdown