25 分钟
Python 进阶

dataclass 与 pathlib:现代化 Python

用 dataclass 定义数据类,用 pathlib 处理文件路径

  • 掌握 @dataclass 装饰器的用法
  • 学会 field() 的常用参数
  • 用 pathlib 替代 os.path
  • 了解现代 Python 的编码风格

为什么需要 dataclass?

传统的类要手写 __init__、__repr__、__eq__,太繁琐。@dataclass 自动生成这些方法,不用你管,专注数据就行。

示例代码(可运行)

field() 高级用法

示例代码(可运行)
💡dataclass vs NamedTuple vs dict

dataclass 可变、有默认值、可继承;NamedTuple 不可变、更省内存、支持解包;dict 最灵活但没有属性访问。数据结构固定时优先用 dataclass。

pathlib:面向对象的路径操作

os.path 是字符串拼接的方式,容易出错。pathlib 用对象表示路径,更直观、跨平台。

示例代码(可运行)
示例代码(可运行)
🐍pathlib 是现代 Python 的标配

Python 3.4+ 内置,官方文档和新项目都推荐用 pathlib 替代 os.path。它自动处理 Windows/Unix 路径差异。唯一的例外是需要和某些只接受字符串的旧库交互时,用 str(path) 转换。

小测验

选择题

@dataclass(order=True) 的作用是?

预测输出
from pathlib import Path
p = Path("/a/b/c.txt")
print(p.stem)

资深工程师加餐

底层原理 · 大厂视角 · 工程经验,点卡片展开

内层函数(或 lambda)捕获的是外层变量本身,而不是定义那一刻的值;循环里定义的多个函数,循环结束后调用往往都拿到最后的值。解决办法是用默认参数 f(x=x) 立即绑定,或用工厂函数包一层。配合 LEGB 作用域顺序(局部→外层→全局→内建)理解,90% 的作用域谜题都能解开。

挑战任务

文件整理工具

简单+50 XP

用 pathlib 写一个文件整理函数:按扩展名分类移动文件到对应子目录。

文件整理工具
2 个测试用例

课后作业

配置管理器

中等+20 XP

用 dataclass 定义 AppConfig 类,包含 host、port、debug、features 列表。支持从字典创建,能序列化为字典。

配置管理器
1 个测试用例