用途
modern-python 是一个智能体技能,面向使用 Python 3.13+ 的编写、重构、审查与设计工作。它强调“通过构造保证正确”(correct by construction):把尽可能多的检查从运行时前移到类型检查器和 linter,让一整类缺陷在代码构造阶段就无法出现,而不是等到运行阶段才被发现或遗漏。
核心理念
资料指出,cast(...)、# type: ignore、用 getattr/hasattr/setattr 替代真实类型、以及用防御性 if 守护自身类型已排除的状态,都是同一个信号:上游某处的类型错误或类型缺失。正确处理方式是修复类型,而不是掩盖问题。资料还强调,这是一种设计哲学而非单纯的 linter 配置,应当把每条参考背后的推理应用到眼前的具体情况,而不是机械照搬示例。
使用方式
该技能文件本身是一个“路由器”而非全部内容,刻意保持精简,以免挤占实际任务;使用者只读取与当前工作匹配的参考文件。资料给出的对应关系包括:
- 搭建项目、选择 lint/类型检查工具,或看到 pip/venv/black/mypy 命令时,阅读 references/tooling.md(uv、ruff、ty)。
- 把原始输入(dict、JSON、配置文件、请求体)转换为可信数据时,阅读 references/parse-dont-validate.md。
- 为值、记录或配置形状建模,或在 dataclass、Pydantic、NamedTuple、TypedDict 之间选择时,阅读 references/data-modeling.md。
- 当 None、魔法字符串/整数或布尔对表示多重含义时,阅读 references/sentinels.md。
- 为封闭的案例集合建模,或对其编写 if/elif/match 时,阅读 references/exhaustiveness.md(typestate、可辨识联合、assert_never)。
- 准备写 cast(...)、# type: ignore、getattr、hasattr 或 setattr 时,阅读 references/type-narrowing.md。
- 判断某个对象是否应当可变,或注意到模块级/全局/共享值时,阅读 references/immutability-and-state.md。
- 编写较长的 if/elif 链或怀疑某项检查是否仍需要时,阅读 references/control-flow.md。
- 设计函数签名、类或公共模块接口时,阅读 references/api-design.md。
- 编写 asyncio 代码、派生任务,或考虑 threading/multiprocessing 时,阅读 references/concurrency.md。
- 判断在类型检查器已覆盖诸多情形后还需要测试什么时,阅读 references/testing.md。
- 怀疑是否存在更直接的现代标准库/typing 写法时,阅读 references/language-features.md。
快速自检要点
资料提供了一组编码时可随手对照的自检问题:
- 这里是边界吗(外部输入、配置文件、json.loads 得到的 dict)?应立刻解析成真实类型,不要让原始 dict 或 Any 越过首次接触点继续传递(parse-dont-validate.md)。
- 这里的 None、-1 或 "unknown" 是否表示多重含义?需要哨兵值或合适类型,而不是在下游多处再写 is None 检查(sentinels.md)。
- 这个 dict/tuple/布尔对是否已在两处以上形成约定形状?应给它命名(data-modeling.md)。
- 这个 if/elif 链(或布尔对)是否其实是小型封闭案例集?应命名并用 assert_never 结尾匹配(exhaustiveness.md)。
- 是否准备写 cast(...)、# type: ignore、getattr(...) 或 hasattr(...)?这是类型检查器在提示形状不对,而不是待走的形式(type-narrowing.md)。
- 该函数是否修改了调用方之后仍可见的对象,或触碰模块/全局状态?应有意识地决定并使其可见,对任何共享内容保持警惕(immutability-and-state.md)。
- 是否为尚不存在的调用方新增参数、别名或回退?参考 api-design.md。
- 是否用 asyncio.gather/create_task 派生任务,或使用线程/锁?应确保失败与取消是结构化的,而非被遗弃(concurrency.md)。
- 是否已把能交给类型检查器的都交出去了,剩下真正需要测试的是什么?是边界解析器、运行时不变式与行为,而非形状(testing.md)。
资料还指出这些做法会相互叠加:一个被建模为正确类型的值通常也会变得不可变、被穷尽处理,并几乎顺带地免受共享状态缺陷影响。
限制
资料未提供该技能的安装命令、运行环境要求、许可证、收费方式或具体测试数据。其分类归属为编程与开发。