3.6 小结和复习
本章学到了什么?
小白版总结
这一章我们学会了用"设计图"(类)来造"东西"(对象):
第1节:类和对象 → 画设计图,按图造东西 第2节:继承和多态 → 子承父业,各有各的表现 第3节:Protocol和ABC → 定规范,立规矩 第4节:dataclass → 省代码的数据容器 第5节:实战Tool → 给AI写技能
核心概念回顾
OOP 四大支柱
小白理解 - 四大支柱一图看懂
支柱 一句话 生活类比 封装 数据和方法绑定在一起 手机:电池+屏幕+系统打包成一个整体 继承 子类复用父类的功能 儿子继承爸爸的房子 多态 同一动作,不同表现 所有动物都会叫,但叫法不同 抽象 只关心"能做什么",不关心"怎么做" 开车只管方向盘,不管发动机原理
- 封装(Encapsulation):数据和方法绑定在一起
- 继承(Inheritance):复用和扩展代码
- 多态(Polymorphism):同一接口,不同实现
- 抽象(Abstraction):隐藏复杂性
本章关键语法速查表
| 语法 | 用途 | 示例 |
|---|---|---|
class 类名: | 定义类 | class Dog: |
__init__(self, ...) | 初始化方法 | def __init__(self, name): |
self.属性 | 实例属性 | self.name = name |
class 子类(父类): | 继承 | class Puppy(Dog): |
super() | 调用父类方法 | super().__init__(name) |
@property | 属性装饰器 | 方法伪装成属性 |
@abstractmethod | 抽象方法 | 子类必须实现 |
@dataclass | 数据类装饰器 | 自动生成 init 等 |
与 LangChain 的联系
为什么学 OOP 对 AI 开发重要?
LangChain/LangGraph 大量使用 OOP:
- Tool 继承自 BaseTool
- Agent 继承自 BaseAgent
- Chain 使用多态处理不同组件
学会 OOP = 看懂源码 + 自定义扩展
python
# LangChain Tool 继承自 BaseTool
from langchain.tools import BaseTool
class MyTool(BaseTool):
name = "my_tool"
description = "My custom tool"
def _run(self, query: str) -> str:
return f"Result: {query}"复习检测
概念检测
回答以下问题(不看代码):
- 类和对象的关系是什么?
__init__什么时候执行?self代表什么?- 继承的好处是什么?
- 什么是多态?
- ABC 和 Protocol 有什么区别?
- dataclass 帮你省了什么代码?
点击查看答案
- 类是蓝图,对象是根据蓝图创建的实例
- 创建对象时自动执行
- 当前对象自己
- 子类可以复用父类的代码,不用重复写
- 同一个方法,不同类有不同的实现
- ABC 必须显式继承,Protocol 只看有没有对应方法
__init__、__repr__、__eq__等方法
练习挑战
挑战 1:基础练习
实现一个 Animal 类层次:
python
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
pass # 子类实现
class Dog(Animal):
# TODO: 实现 speak() 返回 "汪汪!"
pass
class Cat(Animal):
# TODO: 实现 speak() 返回 "喵喵~"
pass挑战 2:进阶练习
用 dataclass 实现一个 Agent 配置:
python
from dataclasses import dataclass, field
from typing import List
@dataclass
class AgentConfig:
# TODO: 实现
# - name: 必填
# - model: 默认 "gpt-3.5-turbo"
# - tools: 默认空列表
# - temperature: 默认 0.7,验证范围 0-2
pass挑战 3:高难度挑战
实现一个完整的 Agent 类层次结构:
python
from abc import ABC, abstractmethod
from typing import List, Protocol
class Agent(ABC):
@abstractmethod
def execute(self, task: str) -> str:
pass
class SearchAgent(Agent):
# TODO: 实现
pass
class AnalysisAgent(Agent):
# TODO: 实现
pass学习建议
新手路线图
必会:类、对象、__init__、self、继承 ↓ 进阶:@property、dataclass、ABC ↓ 高级:Protocol、描述符、元类(用到再学)记住:不需要一次学会所有内容,先掌握基础,其他用到时再查。