编程启蒙|Scratch 转 Python 系列第 16 天:继承与多态积木双向对照(AI Agent 角色体系实战)
📚 系列定位:从 Scratch 积木到 Python 代码,双向对照学 AI 编程
✍️ 作者:梅雅达编程工作室
🎯 本篇难度:⭐⭐⭐⭐(进阶篇)
一、摘要
本篇是 Scratch 转 Python 系列第 16 天,聚焦 面向对象三大特性中的「继承」与「多态」。我们从 Scratch「精灵克隆 + 复用自定义积木」出发,讲透 Python 中 父类 / 子类 / super() / 方法重写 / 多态调用 的双向对照关系;并基于第 15 天的 AIRole 基类,继承出 KefuAgent(客服)/ FanyiAgent(翻译)/ ZhujiaoAgent(助教) 三个子类,构建一个真正可扩展的 AI Agent 角色体系。学完本篇,你会明白:为什么现代 AI Agent 框架(LangChain、AutoGen、扣子)都在用「基类 + 继承」的方式组织角色。
二、本节课学习目标
- 🎯 掌握 继承的语法:
class 子类(父类)的写法,理解 “is-a” 关系 - 🎯 掌握
super()与方法重写:子类如何复用父类逻辑、又如何"定制"自己的行为 - 🎯 理解 多态:同一个方法名,不同对象跑出不同结果的编程哲学
- 🎯 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 三个子类,每个子类重写 greet 和 chat 方法,实现多态调用。
Scratch 积木思路
- 主精灵「
AIRole」定义共性积木:初始化、打招呼、对话、看历史、清历史 - 复制出三个子精灵:客服 / 翻译 / 助教
- 每个子精灵重写「打招呼」和「对话」,其他积木保持继承
- 主程序把三个精灵放进列表,循环调用同名积木,看多态效果
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)写代码练习
六、高频易错点总结
- ❌ 忘写
super().__init__():子类重写__init__后没喊爸爸,父类属性全丢,后面用self.xxx就报错 - ❌ 方法名大小写写错:
Greet和greet不是同一个方法,重写变新增,多态失效 - ❌ 误以为继承是复制:修改父类方法后,子类不重写的那部分会跟着变,这是特性不是 bug
- ❌ 括号里写实例不写类:
class 子类(父类())是错的,class 子类(父类)才对 - ❌ super() 传参多一个 self:
super().__init__(self, name)是错的,super().__init__(name)才对(self会自动传)
七、💡 学习提示
为鼓励大家动手练习、吃透编程逻辑,本篇不提供 Scratch 成品源码,请对照截图亲手搭建积木完成复刻!
配套 Python 代码可直接复制运行学习。
八、往期历史笔记
-
编程启蒙|Scratch 转 Python 系列第 3 天:循环重复积木双向对照(AI 批量循环处理,已收录 AI Agent 技术社区)
-
编程启蒙|Scratch 转 Python 系列第 5 天:自定义积木 / 函数双向对照(AI 工具封装、重复指令简化实战)
-
编程启蒙|Scratch 转 Python 系列第 6 天:列表、数组积木双向对照(AI 底层语法 / AI 批量数据处理实战)
-
编程启蒙|Scratch 转 Python 系列第 7 天:猜数字大挑战·升级版实战(AI 出题 + 二分查找最优解 + 完整命令行游戏 已被收录在智能体开发者社区)
-
编程启蒙|Scratch 转 Python 系列第 12 天:记忆翻牌游戏实战(AI 图案主题包 + 存档排行榜 已被收录在2048 AI社区)
-
编程启蒙|Scratch 转 Python 系列第 13 天:异常处理 try/except 积木双向对照(AI 接口调用容错实战)
-
编程启蒙|Scratch 转 Python 系列第 14 天:AI 提示词管理工具实战(增删改查 + 存档导入 + 异常兜底)
-
编程启蒙|Scratch 转 Python 系列第 15 天:类与对象积木双向对照(AI 角色类封装实战)已被智能体开发者社区收录
十、下一章预告
第 17 天:AI 聊天机器人实战(多角色对话 + 人设切换)
综合运用今天的 Agent 角色体系 + Day 6 列表 + Day 9 字典,做一个真正可交互的 CLI 聊天机器人:
- 支持多角色人设自由切换(客服 / 翻译 / 助教 / 写手…)
- 多轮对话上下文记忆
- 聊天历史存档 & 一键清理
- 命令行菜单 UI
一天玩透 AI Agent 的雏形,下一步就能接真实的大模型 API 了!🚀
十一、原创声明
本文为「梅雅达编程笔记」原创技术教程,未经授权禁止转载、洗稿或用于商业培训。转载合作请联系工作室。系列内容持续更新中,欢迎收藏 CSDN 专栏「编程启蒙–scratch」追更 🍃
更多推荐



所有评论(0)