Python 面向对象完整学习路线:魔法函数、组合、继承、管理类实战(附全套源码)
前言很多初学者学 Python 面向对象只会写简单class Person遇到项目就踩坑打印对象全是内存地址、多个管理类数据不互通、子类无法复用父类逻辑、对象比较失效。本文结合课堂完整示例代码从字符串魔法函数→运算符魔法函数→组合类→继承→管理类实战完整拆解所有代码可直接运行适配学生成绩管理系统开发场景解决你开发中 90% 的 OOP 报错。一、str__与__repr搞定对象打印区分用户视图与调试视图核心概念Python 打印对象默认输出内存地址重写两个魔法函数自定义展示逻辑__str__面向普通用户print(对象)、str(对象)自动调用输出简洁易懂文本__repr__面向开发者调试交互式终端、对象放入列表 / 字典时自动触发输出可重建对象的完整格式。完整示例代码python运行 直接打印实例对象 触发__str__ 将实例对象放入list/dict容器 触发__repr__ repr(实例) 触发__repr__ str(实例) 触发__str__ class Person: def __init__(self, name, age): self.name name self.age age def __repr__(self): 开发者调试完整参数可直接复制创建对象 return fPerson(name{self.name}, age{self.age}) def __str__(self): 普通用户简洁可读信息 return fname: {self.name}, age: {self.age} p1 Person(hus, 10) print(p1) # 调用__str__ → name: hus, age: 10 p2 Person(hasd, 20) print(p2) l1 [{p1:1},{p2:2}] print(l1) # 容器内对象调用__repr__开发避坑写管理系统时学生、课程、成绩类必须同时重写两个方法查看列表数据时不用再循环打印每个属性直接打印列表即可看懂全部信息。二、常用魔法函数大全初始化、比较运算、算数运算1. 基础魔法函数总表表格魔法方法触发时机作用__init__创建实例自动执行初始化实例属性最核心__str__print/str()用户友好字符串__repr__容器、repr ()、调试开发者调试字符串__sizeof__sys.getsizeof()获取对象占用内存大小__dir__dir (对象)自省查看对象所有属性方法2. 比较运算符魔法函数默认对象比较是对比内存地址重写后可按年龄、分数、学号自定义对比规则python运行class MyClass: def __init__(self, name, age): self.name name self.age age # 大于 def __gt__(self, other): return self.age other.age # 大于等于 def __ge__(self, other): return self.age other.age # 小于 def __lt__(self, other): return self.age other.age # 小于等于 def __le__(self, other): return self.age other.age # 相等 def __eq__(self, other): return self.age other.age # 不等 ! def __ne__(self, other): return self.age ! other.age p1 MyClass(张三, 10) p2 MyClass(李七, 2) print(p1 p2) # False按age对比而非内存地址 print(p1 p2) # True3. 算数运算魔法函数__add____sub____mul____truediv__等可实现对象直接加减乘除比如两个分数对象求和、学生总分相加。三、组合类一个类实例作为另一个类的属性项目高频用法概念组合 封装延伸把一个完整对象作为另一个类的成员属性表达「包含关系」比如圆包含坐标点 Point → Circle人包含汽车、武器 Person → Car Weapon 这也是你成绩管理系统的核心结构成绩类包含学生实例、课程实例。实战案例 1点与圆python运行class Point: def __init__(self, x, y): self.x x self.y y def __str__(self): return f({self.x},{self.y}) class Circle: # 组合传入Point实例作为圆心 def __init__(self, center: Point, r): self.center center self.r r def __str__(self): return f圆心{self.center}, 半径{self.r} p1 Point(1, 2) c1 Circle(p1, 2) print(c1) # 圆心(1,2), 半径2 # 访问内部对象属性 print(c1.center.x)实战案例 2人物、汽车 武器多层组合贴近业务开发2. 编写汽车类(颜色速度)编写人 类名字 汽车实例编写武器类类型 属性编写列表 放入 3个人 遍历列表依次打印每个人的信息python运行class Car: def __init__(self, color red, speed 3): self.color color self.speed speed def __str__(self): return fCar({self.color},{self.speed}) class Weapon: def __init__(self,kind,level): self.kind kind self.level level def add_level(self): self.level 1 def __str__(self): return fWeapon{self.kind,self.level} # Person组合Car和Weapon两个对象 class Person: def __init__(self,name,car:Car , weapon:Weapon): self.name name self.car car self.weapon weapon def __str__(self): return fPerson({self.name},{self.car},{self.weapon}) c1 Car() w1 Weapon(菜刀,2) p1 Person(张三,c1,w1) p1.weapon.add_level() print(p1)组合类如果在内部__init__重新 new 管理器会生成独立数据空间python运行# 错误写法每次创建ScoreManage都新建空课程管理器数据隔离 class ScoreManage: def __init__(self): self.course_manage CourseManagement() # 全新空对象正确方案外部传入已初始化的管理器实例共享同一份课程、学生数据python运行# 构造函数接收外部管理器实例 def __init__(self, student_mgr, course_mgr): self.student_manage student_mgr self.course_manage course_mgr # 主程序只创建一次 stu_mgr StudentManage() course_mgr CourseManagement() score_mgr ScoreManage(stu_mgr, course_mgr)进阶实战角色战斗管理类管理类 组合完整项目模板管理类核心逻辑用列表统一存储对象实现增删改查、批量操作学生 / 课程管理系统完全复用这套模板# .编写角色类拥有血量【3000,5000】和攻击力【100,300】以及必要方法 # 随机10个角色血量攻击力随机放入列表 # 列表中的角色依次攻击下一个最后一个攻击第一个 # 角色死亡后移除列表输出最后存活角色信息python运行import random class Character: def __init__(self, name0, hp0, attack0): self.name name self.hp hp self.attack attack def attack_action(self, other): other.hp - self.attack def is_alive(self): return self.hp 0 def __str__(self): return f角色{self.name} 血量{self.hp} 攻击{self.attack} # 管理类统一管理多个Character实例 class CharacterManager: def __init__(self): self.characters [] # 批量创建角色 def create_characters(self, n10): for i in range(1, n 1): c Character(i) c.hp random.randint(3000,5000) c.attack random.randint(100,300) self.characters.append(c) return self.characters # 清理死亡角色倒序删除避免索引错乱 def clear_dead(self): for i in range(len(self.characters)-1, -1, -1): if not self.characters[i].is_alive(): print(f{self.characters[i]} 阵亡) self.characters.pop(i) # 循环对战逻辑 def battle_loop(self): round_cnt 1 while len(self.characters) 1: print(f第{round_cnt}轮战斗) # 循环攻击 for i in range(len(self.characters)): attacker self.characters[i] target self.characters[(i1) % len(self.characters)] if attacker.is_alive(): attacker.attack_action(target) self.clear_dead() round_cnt 1 if self.characters: print(f战斗结束胜利者{self.characters[0]}) else: print全部阵亡 cm CharacterManager() cm.create_characters(5) cm.battle_loop()管理类核心设计思想文档原文管理类管理实例将类实例存入 list遍历列表实现增删改查学生管理、课程管理、成绩管理都遵循这个模式管理器内置self.datas []存储所有对象add_xxx创建实例 append 进列表get_all循环打印列表全部数据get_by_id遍历列表匹配 id 返回指定对象update/delete找到对象修改属性或 pop 删除。四、继承代码复用父类抽公共逻辑子类扩展独有功能基础概念Python 所有类默认继承object语法class 子类(父类)super()调用父类构造方法复用父类属性与方法避免重复写代码。 父类 基类 / 超类子类 派生类。完整示例python运行class Person: def __init__(self, name, age): self.name name self.age age def get_info(self): return f普通人类姓名{self.name}年龄{self.age} def __str__(self): return Person基础类 # SuperPerson继承Person class SuperPerson(Person): def __init__(self, name, age, skill): # 调用父类初始化复用name、age属性 super().__init__(name, age) # 子类独有属性 self.skill skill # 重写父类方法扩展输出 def get_info(self): # 复用父类原有文本追加独有技能 return f超人{super().get_info()}专属技能{self.skill} sp1 SuperPerson(ook, 19, 飞行) print(sp1.get_info())项目使用场景开发管理系统时可以抽公共父类BaseModel封装 id、name、__str__、__repr__学生、课程、成绩子类直接继承不用重复写基础属性与打印方法。五、四大核心知识点总结适配学生成绩管理系统开发字符串魔法函数__str__给用户看__repr__给调试看所有实体类学生、课程、成绩必须重写解决打印对象显示内存地址问题运算符魔法函数重写__eq__、__gt__实现按学号、分数直接对比对象简化查询、排序逻辑组合类重中之重表达「包含关系」成绩类包含学生、课程实例管理类传参注入解决多模块数据隔离你之前找不到课程的核心 bug管理类标准模板列表存储实例统一实现增删改查继承抽取公共逻辑到父类减少重复代码提升项目可维护性。六、配套实战问题答疑对应你之前写系统踩过的坑为什么添加成绩提示无课程 ScoreManage 内部新建独立 CourseManagement 实例两个列表数据隔离采用组合注入方式共享管理器实例即可修复修改信息一直卡死输入年龄 获取性别函数错误转换 int输入文字触发异常无限循环去除 int 转换并增加输入校验打印学生列表只显示内存地址 未重写__str__、__repr__给 Student 类补充两个字符串魔法函数两个学生明明学号相同判断不相等 默认对比内存地址重写__eq__魔法函数按学号判断相等。结尾本文覆盖从基础魔法函数到项目级组合、继承、管理类全部核心代码是 Python 面向对象从小案例过渡到学生管理系统、游戏角色系统的完整学习路径。掌握这套逻辑后再开发任何小型 OOP 项目都能规避绝大多数数据互通、打印、查询类 bug。

相关新闻

2026年正规SEO公司怎么选:七大避坑维度+真实案例复盘+KPI对赌合同指南|精选

2026年正规SEO公司怎么选:七大避坑维度+真实案例复盘+KPI对赌合同指南|精选

核心要点:从需求匹配来看,2026年SEO服务市场良莠不齐,企业筛选正规SEO公司,应围绕资质审查、白帽技术验证、内容质量检查、数据透明度、合同条款、KPI对赌机制以及售后退出安排七个维度展开系统评估。进一步看,本文结合…

2026/10/20 0:09:40 阅读更多 →
Linux交换空间管理、网络安全加固实战

Linux交换空间管理、网络安全加固实战

Linux交换空间管理、网络安全加固实战 Linux 交换空间管理 计算机存储器的层次结构 计算机存储器速度越快,成本较高。 为了获得好的性能/价格比,计算机中各种存储器组成一个层状的塔式结构,取长补短,协调工作。CPU 寄存器&#xf…

2026/10/17 9:45:30 阅读更多 →
2025最权威的十大降AI率神器横评

2025最权威的十大降AI率神器横评

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 如今, 众多学生的得力助手已然是AI写开题报告了, 通过输入研究方向以及关键词, AI在短时间之…

2026/10/18 0:40:42 阅读更多 →

最新新闻

Robot Framework 7.0升级必看:Listener v3迁移与实战

Robot Framework 7.0升级必看:Listener v3迁移与实战

Robot Framework 升级到 7.0 之后,最影响测试平台维护者的一个变化,就是 Listener v2 被正式清退了。很多团队手里还握着一堆start_suite(name, attrs)风格的监听器,一跑起来直接不回调,或者报接口版本不支持。于是就有个很现实的…

2026/10/20 17:21:55 阅读更多 →
键盘操控CarSim/Simulink联合仿真:从固定信号到人机驾驶

键盘操控CarSim/Simulink联合仿真:从固定信号到人机驾驶

做联合仿真这几年,最让我觉得“舒服”的一刻,是把CarSim里那些预制好的方向盘转角曲线换成自己手里的方向键。说句实话,CarSim/TruckSim 与 Simulink 联合仿真最大的痛点往往不是模型精度,而是输入信号太“死”——跑离线工况时&a…

2026/10/20 17:21:55 阅读更多 →
移相全桥离散化Simulink仿真:3kW到3.6W极限切载动态响应分析

移相全桥离散化Simulink仿真:3kW到3.6W极限切载动态响应分析

最近在搭一个移相全桥的离散化Simulink仿真,输入400V,输出60V,满载3kW。最折磨人的不是满载稳态——只要参数不离谱,稳态基本都能稳住。真正暴露问题的反而是把负载从3kW瞬间切到3.6W的那一刻:输出电压直接冲高十几伏&…

2026/10/20 17:21:55 阅读更多 →
STL容器选型与迭代器失效:从原理到工程避坑实践

STL容器选型与迭代器失效:从原理到工程避坑实践

做C的人,十有八九都在STL上栽过跟头。尤其是容器选择和迭代器失效这两件事,堪称面试必问、线上必踩的黄金组合。我见过太多项目,初期拍脑袋选了个std::vector,结果中间插入频繁到性能雪崩;也见过线上服务因为std::dequ…

2026/10/20 17:21:55 阅读更多 →
三电平NPC逆变器SVPWM仿真:扇区划分、小矢量与中点电位平衡

三电平NPC逆变器SVPWM仿真:扇区划分、小矢量与中点电位平衡

1. 三电平NPC逆变器为什么值得上矢量控制? 做电机驱动做到三相异步电机或永磁同步电机的中大功率段,绕不开三电平NPC逆变器这个话题。和两电平结构相比,三电平NPC拓扑在同样直流母线电压下,把IGBT的集射极耐压需求从整条母线电压降…

2026/10/20 17:21:55 阅读更多 →
MCP、Skill、Agent、Prompt:AI应用开发四大概念解析与协同实践

MCP、Skill、Agent、Prompt:AI应用开发四大概念解析与协同实践

1. 从一堆混乱概念说起:为什么这四个词总被混着用 刚接触AI应用开发那会儿,我最怕别人问我"你那个Agent和Prompt到底啥区别"。不是答不上来,是每次答完对方眼神里都写着"你确定?"。后来我发现,问题…

2026/10/20 17:20:54 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →