用途:这是面向 Python 3.11+ 代码库的内部约定,写或改代码时套用;除非被明确要求,不改动未触及的文件来对齐规范。
主要能力与约定:
- 类型:所有公开签名都加类型注解并保持 mypy --strict 通过;内部类型可选,边界类型才关键。使用内置泛型和 X | None 写法,如 list[str]、dict[str, int]、str | None,而非 typing.List、Optional[str]。
- 结构:优先用 Protocol 而非 ABC 继承,以便测试替身等结构相符对象满足契约。数据用 dataclasses,适用时加 slots=True、frozen=True;Pydantic 只用于边界的校验和(反)序列化,不作普通记录。
- 路径:用 pathlib 而非 os.path。禁止可变默认参数,默认用 None 后在函数内构造。
- 异步:3.11+ 优先 asyncio.TaskGroup 而非裸 gather,失败会取消同胞任务并经 ExceptionGroup 报错;用 async with asyncio.timeout(n) 设超时。每个 create_task 都要持有引用,否则可能被垃圾回收而静默消失;示例把任务存入集合并在完成时 discard。
- 异常:禁止裸 except:,它会吞掉 KeyboardInterrupt 和 SystemExit,只捕获能处理的异常。
- 文档:公开函数与类写 Google 风格 docstring,写意图而非复述签名。
- 测试:pytest 用 fixtures 做前置,用 parametrize 区分用例;单个测试里用循环只会报一个失败并隐藏哪条用例坏了。
- 打包与工具链:用 Poetry 和 pyproject.toml,ruff 做 lint 与格式化;需要向外暴露类型的包加 py.typed 标记;采用 src/ 布局,避免测试导入工作目录而非已安装包。
- mypy 基线:strict = true,另开 warn_unreachable、warn_redundant_casts、warn_unused_ignores;对未类型化依赖用 module 覆盖并 ignore_missing_imports。pytest 加 addopts = ["-ra", "--strict-markers", "--strict-config"],--strict-markers 可让拼错的 marker(如 integraton)不再静默失效。
适用场景:在此类 Python 代码库中新增或修改模块、测试与包配置。限制:具体安装与命令资料未提供。