让订单明细可展示、可保存、可恢复|学员任务书
从自己的昨日项目继续
起点:本人 D03 规则函数、模块与报价策略。领取 student/W01-D04 当日增量,查看文件再合并,禁止覆盖本人已完成代码。教师只给合同、分段小例、TODO和检查工具;完整实现不在学生包。
商城任务与知识用途
本日完成:src/models.py中的OrderLine/Cart、UTF-8价格快照和累计订单保存恢复。类实例/self/属性方法、init/repr/str/eq/len、dataclass/StrEnum、组合与继承、浅深拷贝、Path/编码/with、JSON与显式数据校验 都用于这一任务;使用位置及小例见 课堂课件。测试代码属于提供的检查工具,不要求在机制首讲前独立重写测试框架。
分段待办
- 创建普通OrderLine,观察两个实例的数据独立;方法total复用本人金额函数。
- 用dataclass替换重复初始化与比较,显式检查数量/价格;添加__str__,用Cart组合明细并定义len为行数。
- 用StrEnum集中订单状态名,支付/取消仍调用原迁移规则。做浅复制、深复制与只读快照比较。
- 领取W01-D04的exercise.py与check_model.py,完成显式TODO;先运行普通检查,不要求提前写pytest。
- 实现to_dict、line_from_dict、save/load。最小练习的unit_price单位为元;累计订单保持unit_price_yuan字段,明确映射。
- 新快照使用x创建,路径父目录先存在;已有文件拒绝覆盖。读取失败保留原文件和异常。
- 合并到本人src/models.py,并给累计订单逐字段保存编号、客户、状态和所有明细;价格快照完成与整单恢复完成分别记录。
运行和核对
从自己的项目根目录、当前选中Python解释器运行:
python check_model.py| 场景 | 预期 |
|---|---|
| 两个同值OrderLine | ==为真,is为假 |
| 一行数量2 | len(cart)=1,总金额258.00 |
| 修改商品现价129→199 | 历史明细仍258.00 |
| 数量True、0、负数;价格NaN或1.001 | 构造拒绝 |
| 新快照保存后另进程读取 | 字段与Decimal金额相同 |
| 缺文件、坏文件、已有目标 | 分别明确失败;不覆盖旧文件 |
| 两个购物车 | 添加一车不改另一车 |
个人变化与交付
先在不看参考实现的情况下预测结果,再运行;记录输入、预期、实际、修复及原样本回归。提交代码、固定Git提交、一次故障定位、一次AI差异审查和同伴复现记录。只交全绿截图或生成代码而不能解释,不构成通过。
核心:完成本日分段待办和验收表。进阶:自行换一条同规模业务输入或故障。挑战:减少重复或改进说明,但仍须守住当前合同;不靠提前引入框架、数据库或消息队列替代基础练习。全部必做在课堂实践时段完成,课后复习只整理已做结果。
下一日:D05 为已有调用添加日志、异常分类和自动测试,接入CLI。
累计保存恢复骨架位于src/order_snapshot.py:先完成单行检查,再接本人订单列表。字段校验、金额核对和先恢复后替换必须保留。