Advance_Assessment 2
目录
- 项目整体架构
- 模块依赖关系
- 类继承体系
- 完整数据流水线
- 模块 1:load_raw_records
- 模块 2:build_posts
- 模块 3:count_embedded_likes
- 模块 4:descendants_of
- 模块 5:solution_remover 装饰器
- 端到端调用示例
Structure
模块依赖关系
load_raw_records.py不依赖任何项目内模块,纯文本处理;其他文件都围绕post.py的类展开。
类继承体系
三种类的核心区别
| 类 | 是否有 children | 角色 | 在树中的位置 |
|---|---|---|---|
Post | ❌ | 抽象基类 | 不直接使用 |
TextPost | ❌ | 普通文本帖 | 叶子节点 |
StoryPost | ✅ | 故事帖(可包含其他帖) | 分支节点 |
完整数据流水线
模块 1:load_raw_records
职责:把
posts.txt文件每一行原始字符串解析为dict,并修复text字段。
fix_text 字符修复算法
示例:
'b'(ord=98,偶数)→'a';'a'(ord=97,奇数)→'b'。这是个对称变换:fix_text(fix_text(x)) == x
load_raw_records 主流程
文件中的两个版本对比
| 版本 | 实现方式 | 特点 |
|---|---|---|
| 第 1 个(被覆盖) | f.readlines() 一次读完 → return list | 占内存 |
| 第 2 个(生效) | for line in f + yield record | 生成器,省内存 |
注意:Python 中后定义的函数会覆盖前面的同名函数,所以实际生效的是第二个
yield版本!
模块 2:build_posts
职责:把
dict列表转换为Post对象字典,处理重复 ID 时合并。
模块 3:post.py
Python 技术文档#第 7 章 面向对象编程Computer science foundation note#第 18 章 面向对象核心概念
Post.__init__ 参数校验流程
StoryPost 额外校验流程
Post.merge_in 合并方法流程
💡 设计哲学:合并时点赞累加(数据汇总),但文本保留较长版本(信息更全)。
模块4:count_embedded_likes — 统计点赞总数
Python 技术文档#**第 15 章:递归函数(Recursive Functions)**Computer science foundation note#13.7 递归 vs 迭代(互相转换)
职责:递归统计某个帖子自己 + 所有后代的总点赞数。
函数主流程
递归调用栈示意(树形展开)
模块5:descendants_of — 后代查询
Python 技术文档#**第 15 章:递归函数(Recursive Functions)**Computer science foundation note#13.7 递归 vs 迭代(互相转换)
职责:递归收集某个帖子的所有后代帖子(去重 + 过滤无点赞 + 排除 solution)。
函数主流程
关键设计要点
模块6: solution_remover — 装饰器过滤
Python 技术文档#**14.2 装饰器(Decorators)**
职责:作为装饰器,自动过滤掉返回列表中任何
text包含 “solution”(不区分大小写)的StoryPost。
装饰器
装饰器结构(洋葱模型)
最后更新 · 2026-05-19 23:52