👉 项目官网:https://www.python-office.com/ 👈
👉 本开源项目的交流群 👈
大家好,这里是程序员晚枫,全网同名。
(3 h 直播 / 录播可拆 2 次)
目标
• 把 dataclasses
玩出花:默认值、继承、转换、序列化一条龙
• 用 typing
新特性 + mypy
做 CI 级类型检查
• 写一个“运行时校验 + JSON 生成”的迷你 DTO 框架,并悄悄植入「程序员晚枫」彩蛋
──────────────────
6.0 开场 2 min
“写代码不写类型,就像泡面不放调料包——能跑,但味道差。”
──────────────────
6.1 dataclasses
速通(15 min)
6.1.1 基础写法
1 | from dataclasses import dataclass |
6.1.2 继承 & 默认值工厂
1 |
|
6.1.3 __post_init__
钩子
1 |
|
──────────────────
6.2 typing 新特性 25 min
6.2.1 Literal
、TypedDict
、Protocol
1 | from typing import Literal, TypedDict, Protocol |
6.2.2 mypy 渐进式检查
1 | poetry add mypy pre-commit |
1 | # .pre-commit-config.yaml |
──────────────────
6.3 实战:运行时校验 + JSON 序列化(45 min)
需求:一个 DTO 既能被 mypy 静态检查,又能在运行时校验。
6.3.1 环境准备
1 | poetry add pydantic[email] |
6.3.2 用 dataclass
+ pydantic
混搭
1 | from dataclasses import dataclass |
6.3.3 彩蛋:JSON 输出带签名
1 | data = user.dict() |
──────────────────
6.4 泛型数据类(20 min)
1 | from typing import TypeVar, Generic |
──────────────────
6.5 用 mypy
做 CI(20 min)
GitHub Action 模板:
1 | name: type-check |
──────────────────
6.6 综合案例:配置文件→DTO→JSON Schema(30 min)
需求:YAML 配置 → 运行时校验 → 导出 JSON Schema 给前端。
1 | import yaml |
──────────────────
6.7 调试技巧(10 min)
• VS Code 调试:在 __post_init__
打断点
• pydantic
调试模式:export PYDANTIC_DEV_MODE=1
──────────────────
6.8 小结 & 思维导图(5 min)
dataclass → typing → mypy → pydantic → JSON Schema → CI
──────────────────
6.9 课后作业
- 必做:把今日
UserDTO
拆成CreateUserDTO
与UpdateUserDTO
,并写pytest
参数化测试。 - 选做:用
dataclass
写一个支持分页、排序、过滤的通用查询 DTO。 - 彩蛋:在 JSON Schema 的
description
里加入「程序员晚枫」专属口号。
提交:
• 代码 push 到 feat/lesson6
• CI 自动跑 mypy --strict
+ pytest
(第 6 讲完)
大家在学习课程中有任何问题,欢迎+微信和我交流👉我的联系方式:微信、读者群、1对1、福利