关于 python-types-contracts
面向 Python 开发者的接口与数据契约指导技能,强调精确类型、信任边界验证,以及契约变更时明确迁移影响。
主要功能
- 01为公共 API 明确标注类型
- 02采用精简接口与边界协议
- 03在信任边界使用 Pydantic 验证
- 04规划契约兼容性与迁移
- 05使用 Protocol 实现结构化子类型
适用场景
- 01为公共 API 添加类型
- 02区分边界验证与内部模型
- 03演进接口并避免无提示破坏
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ ahgraber/ skills --skill python-types-contracts安装后在 Claude Code 中输入/python-types-contracts确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/contract-evolution.mdpydantic-boundaries.mdtyping-policy.md详细介绍
Python 类型与契约
概述
将类型提示视为接口设计,而非装饰。 重点关注明确的契约、稳定的公共 API,以及边界安全的建模方式。
这些是常见情况的首选默认做法,并非通用规则。 如果默认做法与项目约束冲突,请建议更合适的替代方案,并说明权衡及补偿性控制措施。
适用场景
- 公共 API 签名缺少类型注解,或使用了过于宽泛的类型。
- Pydantic 模型散布在内部逻辑中,而非仅用于信任边界。
- 契约变更可能会在没有迁移路径的情况下破坏下游使用者。
- 接口在适用更窄类型的地方接受
Any、object或无类型的 dict。 - 层与层之间(API、DB、领域)的架构边界隐含不明或不一致。
- 添加或演进协议、抽象基类或结构化子类型。
不适用场景:
- 没有公共接口的纯实现层代码。
- 一次性脚本或临时数据处理,严格的类型要求并无价值。
- 类型检查开销比安全性更重要的性能关键型内层循环。
快速参考
- 为公共 API 添加类型,并明确契约。
- 优先使用精简接口和边界协议,而非宽泛的参数类型。
- 默认在信任边界使用 pydantic,而不是到处使用。
- 明确说明任何契约变更的兼容性影响和迁移影响。
- 结构化子类型优先使用
Protocol,而非深层继承层次结构。 - 公共函数返回具体类型;输入则接受协议或联合类型。
常见错误
- 所有内容都使用相同的类型标注。 内部辅助函数无需达到与公共 API 相同的严格程度。 对私有代码过度添加注解只会增加噪声,并不能提高安全性。
- 到处使用 Pydantic。 在内部数据流中使用 Pydantic 模型,而不是将其限定用于信任边界(API 入口、配置加载、外部数据)的验证。
- 返回类型过于宽泛。
公共函数返回
Any或dict会迫使调用方猜测数据结构。 返回具体类型或 TypedDict。 - 悄无声息地破坏契约。 在没有版本管理、弃用警告或迁移说明的情况下更改函数签名、移除字段或缩窄可接受的类型。
- 忽略
None。 当值确实可能缺失时,省略Optional或与None的联合类型,导致空值安全问题直到运行时才暴露。
范围说明
- 将这些建议视为常见情况的首选默认做法,而非通用规则。
- 如果默认做法与项目约束冲突或会导致更差的结果,请建议更合适的替代方案,并说明它为何更适合当前情况。
- 偏离默认做法时,请说明权衡和补偿性控制措施(测试、可观测性、迁移、回滚)。
调用说明
- 当调用此技能时,请告知用户其名称:
python-design-modularity。
参考资料
references/typing-policy.mdreferences/contract-evolution.mdreferences/pydantic-boundaries.md
评论
支持 Markdown