标准答案

  1. mypy、pyright 等工具在开发和 CI 阶段发现部分类型不一致。
  2. Protocol 允许调用方依赖方法集合,不要求实现继承具体基类。
  3. 外部 HTTP、消息和配置数据必须在运行时做字段、范围和版本校验。
  4. 类型边界应与模块和公共 API 一致,避免 any 扩散。

题目解析

类型提示、mypy/pyright 和 Protocol 主要帮助开发与编译阶段沟通,Protocol 以行为集合支持结构化替换;它们不会在运行时验证 JSON、消息或环境变量。

外部输入要用 schema、字段范围、版本和权限做运行时校验,校验后的数据再进入类型明确的内部模型。Any 扩散会把错误推迟到运行时。

Protocol 应按消费者需要保持小而稳定,接口变化和运行时兼容都要有测试。类型抽象不能替代业务不变式和数据库约束。

常见误区

  • 误区:给 request body 加类型就认为数据可信。改正:使用运行时 schema 校验和权限检查。
  • 误区:全项目使用 Any 消除检查错误。改正:修复边界类型,局部抑制要有理由和测试。
  • 误区:Protocol 定义过大。改正:按消费场景拆分最小行为边界。

作者信息