📚 系列定位:从 Scratch 积木到 Python 代码,双向对照学 AI 编程
✍️ 作者:梅雅达编程工作室
🎯 本篇难度:⭐⭐⭐⭐(进阶篇)


一、摘要

本篇是 Scratch 转 Python 系列第 16 天,聚焦 面向对象三大特性中的「继承」与「多态」。我们从 Scratch「精灵克隆 + 复用自定义积木」出发,讲透 Python 中 父类 / 子类 / super() / 方法重写 / 多态调用 的双向对照关系;并基于第 15 天的 AIRole 基类,继承出 KefuAgent(客服)/ FanyiAgent(翻译)/ ZhujiaoAgent(助教) 三个子类,构建一个真正可扩展的 AI Agent 角色体系。学完本篇,你会明白:为什么现代 AI Agent 框架(LangChainAutoGen、扣子)都在用「基类 + 继承」的方式组织角色。


二、本节课学习目标

  1. 🎯 掌握 继承的语法class 子类(父类) 的写法,理解 “is-a” 关系
  2. 🎯 掌握 super() 与方法重写:子类如何复用父类逻辑、又如何"定制"自己的行为
  3. 🎯 理解 多态:同一个方法名,不同对象跑出不同结果的编程哲学
  4. 🎯 AI 应用场景:能够独立设计一个 AI Agent 角色体系(基类抽公共能力,子类实现个性化)

三、专业名词通俗释义

名词 通俗解释 Scratch 类比
父类(基类) 定义"共性"的模板,比如"所有 AI 都会打招呼" 主精灵,定义了基础造型和积木
子类(派生类) 在父类基础上"加料"或"改口味",比如"客服 AI 打招呼会带热情语气" 复制主精灵后,改造型 + 改自定义积木
super() 子类里用来"喊爸爸出来干活"的关键字,复用父类已经写好的代码 Scratch 里"运行父级自定义积木"的效果
方法重写(Override 子类里重新定义一个和父类同名的方法,用自己的实现覆盖父类 同名自定义积木,子精灵重新拼装了积木内容
多态(Polymorphism 同一个方法调用,不同对象跑出不同结果(同名不同效) 都叫「打招呼」,客服精灵和翻译精灵反应不一样
Agent AI 中的"角色/智能体",有身份、有能力、能对话 一个带完整积木包的精灵

四、分模块双向对照知识点

模块 1:基础继承语法

Scratch 积木逻辑

主精灵「AI机器人」定义了「打招呼」积木;复制出「客服机器人」精灵后,它默认继承「打招呼」积木,无需重新写。
在这里插入图片描述

在这里插入图片描述

Python 源码(含 Scratch 积木注释)

# 【Scratch积木】新建父精灵「AI机器人」
class AIRobot:
    def __init__(self, name):
        self.name = name

    # 【Scratch积木】自定义积木「打招呼」
    def greet(self):
        print(f"你好,我是 {self.name}")

# 【Scratch积木】复制精灵「AI机器人」→ 生成子精灵「客服机器人」
class KefuRobot(AIRobot):
    pass  # 什么都不改,直接继承父类全部能力

kefu = KefuRobot("小助手")
kefu.greet()  # ← 直接用父类的 greet

运行结果

你好,我是 小助手

核心易错说明

  • class KefuRobot(AIRobot): 括号里是父类名,不是父类实例
  • 子类完全不写任何代码时,用 pass 占位,不能留空

模块 2:super() 与方法重写

Scratch 积木逻辑

「客服机器人」想让「打招呼」在父类基础上多说一句"很高兴为您服务"。做法是:先运行父级积木,再追加自己的说话积木。
在这里插入图片描述

在这里插入图片描述

Python 源码(含 Scratch 积木注释)

class AIRobot:
    def __init__(self, name):
        self.name = name

    def greet(self):
        print(f"你好,我是 {self.name}")

# 【Scratch积木】子精灵「客服机器人」重写「打招呼」积木
class KefuRobot(AIRobot):
    def greet(self):
        # 【Scratch积木】先运行父级「打招呼」积木
        super().greet()
        # 【Scratch积木】再说 (很高兴为您服务) 2 秒
        print(f"很高兴为您服务~")

kefu = KefuRobot("小助手")
kefu.greet()

运行结果

你好,我是 小助手
很高兴为您服务~

核心易错说明

  • super() 后面必须加 .方法名(),不能直接 super().name
  • 重写方法名要和父类一模一样(大小写敏感),错一个字母就变成"新增方法"而不是"重写"

模块 3:__init__ 的继承与扩展

Scratch 积木逻辑

子精灵在"被创建时",除了继承父类的初始化设置(比如名字),还要额外设置自己独有的属性(比如客服等级)。
在这里插入图片描述

Python 源码(含 Scratch 积木注释)

class AIRobot:
    def __init__(self, name):
        self.name = name

class KefuRobot(AIRobot):
    # 【Scratch积木】子精灵「被创建时」的自定义初始化
    def __init__(self, name, level):
        # 【Scratch积木】先运行父级「被创建时」积木
        super().__init__(name)
        # 【Scratch积木】再设 (客服等级) 为传入值
        self.level = level

kefu = KefuRobot("小助手", "金牌")
print(f"{kefu.name} - {kefu.level}客服")

运行结果

小助手 - 金牌客服

核心易错说明

  • 忘记调用 super().__init__() 会导致父类的属性没被初始化,后续调用 self.name 会报 AttributeError
  • super().__init__(name) 只传父类需要的参数,别把子类独有的参数(如 level)传进去

模块 4:多态——同名方法不同实现

Scratch 积木逻辑

三只精灵都有「打招呼」积木,但每只精灵的积木内容不同。用同一句代码"让每只精灵打招呼",就能看到不同的效果。
在这里插入图片描述

Python 源码(含 Scratch 积木注释)

class AIRobot:
    def __init__(self, name):
        self.name = name
    def greet(self):
        print(f"你好,我是 {self.name}")

class KefuRobot(AIRobot):
    def greet(self):
        print(f"亲亲~我是客服 {self.name},有什么可以帮您?")

class FanyiRobot(AIRobot):
    def greet(self):
        print(f"Hello, I'm {self.name}, your translator.")

# 【Scratch积木】把三只精灵放进列表
robots = [KefuRobot("小助"), FanyiRobot("Sara"), AIRobot("小凌")]

# 【Scratch积木】重复 (列表长度) 次 → 依次让每个精灵打招呼
for r in robots:
    r.greet()  # ← 同一句代码,跑出三种效果!

运行结果

亲亲~我是客服 小助,有什么可以帮您?
Hello, I'm Sara, your translator.
你好,我是 小凌

核心易错说明

  • 多态的关键是"方法名相同"——名字变了就不是多态
  • 循环里不需要判断类型,Python 会自动根据对象的实际类型找到对应的方法(这叫鸭子类型

五、综合实战项目:AI Agent 角色体系

以第 15 天的 AIRole 基类为父类,继承出 KefuAgent / FanyiAgent / ZhujiaoAgent 三个子类,每个子类重写 greetchat 方法,实现多态调用。

Scratch 积木思路

  1. 主精灵「AIRole」定义共性积木:初始化、打招呼、对话、看历史、清历史
  2. 复制出三个子精灵:客服 / 翻译 / 助教
  3. 每个子精灵重写「打招呼」和「对话」,其他积木保持继承
  4. 主程序把三个精灵放进列表,循环调用同名积木,看多态效果

Python 完整可运行代码(片段)

class AIRole:
    def __init__(self, name, style):
        self.name = name
        self.style = style
        self.history = []

    def greet(self):
        print(f"你好,我是 {self.name}")

    def chat(self, user_input):
        reply = f"[通用回复]收到:{user_input}"
        self.history.append({"user": user_input, "bot": reply})
        return reply


class KefuAgent(AIRole):
    """客服 Agent:热情耐心"""
    def greet(self):
        super().greet()
        print(f"很高兴为您服务,请问有什么可以帮您?({self.style})")

    def chat(self, user_input):
        reply = f"亲亲~您说的「{user_input}」已收到,正在为您处理哦~"
        self.history.append({"user": user_input, "bot": reply})
        print(reply)
        return reply


# 完整代码及 FanyiAgent / ZhujiaoAgent / 多态调用 main
# 见配套源码文件 day16_code.py

运行结果预览

===== AI Agent 角色体系演示 =====
你好,我是 小助手
很高兴为您服务,请问有什么可以帮您?(热情耐心)
你好,I'm Sara
Professional translation service at your service.
你好,我是 小张老师
同学好,今天想学点什么呢?我们一起循循善诱地拆解吧~

--- 多态调用测试 ---
亲亲~您说的「订单退款」已收到,正在为您处理哦~
「Hello World」译文示例:你好,世界(示例仅供参考)
关于「递归」,我们分三步:1)看例子 2)找规律 3)写代码练习

六、高频易错点总结

  1. 忘写 super().__init__():子类重写 __init__ 后没喊爸爸,父类属性全丢,后面用 self.xxx 就报错
  2. 方法名大小写写错Greetgreet 不是同一个方法,重写变新增,多态失效
  3. 误以为继承是复制:修改父类方法后,子类不重写的那部分会跟着变,这是特性不是 bug
  4. 括号里写实例不写类class 子类(父类()) 是错的,class 子类(父类) 才对
  5. super() 传参多一个 selfsuper().__init__(self, name) 是错的,super().__init__(name) 才对(self 会自动传)

七、💡 学习提示

为鼓励大家动手练习、吃透编程逻辑,本篇不提供 Scratch 成品源码,请对照截图亲手搭建积木完成复刻!
配套 Python 代码可直接复制运行学习。


八、往期历史笔记

  1. 编程启蒙|Scratch 转 Python 系列第 1 天:变量、数字运算积木双向对照(AI 基础数值计算实战)

  2. 编程启蒙|Scratch 转 Python 系列第 2 天:分支判断 if 积木双向对照(AI 指令条件过滤实战)

  3. 编程启蒙|Scratch 转 Python 系列第 3 天:循环重复积木双向对照(AI 批量循环处理,已收录 AI Agent 技术社区)

  4. 编程启蒙|Scratch 转 Python 系列第 4 天:字符串文本积木双向对照(AI 提示词拼接、文本清洗实战)

  5. 编程启蒙|Scratch 转 Python 系列第 5 天:自定义积木 / 函数双向对照(AI 工具封装、重复指令简化实战)

  6. 编程启蒙|Scratch 转 Python 系列第 6 天:列表、数组积木双向对照(AI 底层语法 / AI 批量数据处理实战)

  7. 编程启蒙|Scratch 转 Python 系列第 7 天:猜数字大挑战·升级版实战(AI 出题 + 二分查找最优解 + 完整命令行游戏 已被收录在智能体开发者社区)

  8. 编程启蒙|Scratch 转 Python 系列第8天:节奏敲击机游戏实战(AI节奏谱生成实战)

  9. 编程启蒙|Scratch 转 Python 系列第9天:字典/哈希表积木双向对照(AI大模型参数配置表实战)

  10. 编程启蒙|Scratch 转 Python 系列第 10 天:问答闯关游戏实战(AI 题库管理 + 多关卡剧本)

  11. 编程启蒙|Scratch 转 Python 系列第 11 天:文件读写积木双向对照(AI 训练数据存取实战)

  12. 编程启蒙|Scratch 转 Python 系列第 12 天:记忆翻牌游戏实战(AI 图案主题包 + 存档排行榜 已被收录在2048 AI社区)

  13. 编程启蒙|Scratch 转 Python 系列第 13 天:异常处理 try/except 积木双向对照(AI 接口调用容错实战)

  14. 编程启蒙|Scratch 转 Python 系列第 14 天:AI 提示词管理工具实战(增删改查 + 存档导入 + 异常兜底)

  15. 编程启蒙|Scratch 转 Python 系列第 15 天:类与对象积木双向对照(AI 角色类封装实战)已被智能体开发者社区收录


十、下一章预告

第 17 天:AI 聊天机器人实战(多角色对话 + 人设切换)

综合运用今天的 Agent 角色体系 + Day 6 列表 + Day 9 字典,做一个真正可交互的 CLI 聊天机器人:

  • 支持多角色人设自由切换(客服 / 翻译 / 助教 / 写手…)
  • 多轮对话上下文记忆
  • 聊天历史存档 & 一键清理
  • 命令行菜单 UI

一天玩透 AI Agent 的雏形,下一步就能接真实的大模型 API 了!🚀


十一、原创声明

本文为「梅雅达编程笔记」原创技术教程,未经授权禁止转载、洗稿或用于商业培训。转载合作请联系工作室。系列内容持续更新中,欢迎收藏 CSDN 专栏「编程启蒙–scratch」追更 🍃

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐