CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Python 进阶/课时/OOP 深入
RawBlame
课时目录12 节

Python 进阶

  1. 01Python 进阶地图
  2. 02类型与数据结构
  3. 03OOP 深入
  4. 04函数式特性
  5. 05并发与异步
  6. 06Web 框架
  7. 07包管理与虚拟环境
  8. 08静态类型与校验
  9. 09测试框架
  10. 10代码质量工具
  11. 11算法与数据结构
  12. 12综合练习

OOP 深入

inheritance、encapsulation、object-oriented-programming。

35 分钟

面向对象进阶

基础课介绍了 class 与继承;本课覆盖魔术方法、属性描述符、抽象基类与组合优于继承,让你写出可扩展的库级代码。前置:python-fundamentals;Agent 工具封装常用 OOP 模式,见 ai-agents-essentials;路径 /roadmaps/python。

学习目标

  • 实现 __repr__、__eq__、__hash__ 使对象可调试、可比较、可入 set
  • 使用 @property 与 @dataclass 简化数据类
  • 理解 ABC(抽象基类)与 Protocol 风格的鸭子类型

dataclass 与魔术方法

from dataclasses import dataclass, field
from typing import ClassVar

@dataclass(frozen=True, slots=True)
class Lesson:
    slug: str
    title: str
    tags: tuple[str, ...] = field(default_factory=tuple)
    version: ClassVar[int] = 1

    def __str__(self) -> str:
        return f"{self.slug}: {self.title}"

lesson = Lesson("pya-oop", "面向对象进阶", ("oop", "advanced"))
print(lesson)  # pya-oop: 面向对象进阶

frozen=True 使实例不可变,可安全作为 dict 键;slots=True(3.10+)减少内存占用。

抽象基类

from abc import ABC, abstractmethod

class Renderer(ABC):
    @abstractmethod
    def render(self, source: str) -> str:
        ...

class MarkdownRenderer(Renderer):
    def render(self, source: str) -> str:
        return source.strip()

def publish(renderer: Renderer, md: str) -> str:
    return renderer.render(md)

组合优于继承

class LoggingRenderer:
    def __init__(self, inner: Renderer) -> None:
        self._inner = inner

    def render(self, source: str) -> str:
        result = self._inner.render(source)
        print(f"rendered {len(result)} chars")
        return result

装饰器模式(包装 inner)比多层继承更清晰,FastAPI 中间件同理。

练习

  • 为 Lesson 实现 __eq__ 仅比较 slug
  • 写一个 CachedRenderer 包装任意 Renderer 并缓存结果
  • 对比 @dataclass 与手写 __init__ 的代码量

小结

OOP 进阶重在接口清晰与可组合性。 下一课用函数式工具处理数据变换,与 OOP 互补而非对立。

加载本节练习…
← 上一课类型与数据结构下一课 →函数式特性