Python 面向对象进阶与实战:从继承到学生管理系统
大家好今天我们来深入学习 Python 面向对象编程的进阶知识包括子类重写父类功能、多层继承、封装、多态、抽象类等核心概念最后通过一个完整的学生管理系统项目将所学知识融会贯通。 目录一、子类重写父类功能二、子类访问父类功能三、多层继承四、封装与私有属性五、多态六、抽象类七、类属性与对象属性八、类方法与静态方法九、dict属性十、项目实战学生管理系统十一、总结一、子类重写父类功能1.1 什么是重写重写覆盖子类出现和父类同名的属性或行为称之为重写。调用层次遵循就近原则——子类有就用没有就去就近的父类找依次查找其所有父类。1.2 重写演示# 师傅类 class Master: def __init__(self): self.kongfu [古法煎饼果子配方] def make_cake(self): print(f运用{self.kongfu}制作煎饼果子) # 学校类 class School: def __init__(self): self.kongfu [AI煎饼果子配方] def make_cake(self): print(f运用{self.kongfu}制作煎饼果子) # 徒弟类 - 重写父类功能 class Prentice(School, Master): def __init__(self): self.kongfu [独创煎饼果子配方] def make_cake(self): print(f运用{self.kongfu}制作煎饼果子) # 测试 p Prentice() print(p.kongfu) # 输出: [独创煎饼果子配方] p.make_cake() # 输出: 运用[独创煎饼果子配方]制作煎饼果子二、子类访问父类功能子类重写父类功能后如果想继续访问父类的功能有两种方式。2.1 方式一父类名.父类功能名(self)特点精准访问想找哪个父类就调用哪个父类。class Prentice(School, Master): def __init__(self): self.kongfu [独创煎饼果子配方] def make_cake(self): print(f运用{self.kongfu}制作煎饼果子) # 精准访问父类功能 def make_master_cake(self): Master.__init__(self) # 初始化父类属性 Master.make_cake(self) # 调用父类方法 def make_school_cake(self): School.__init__(self) School.make_cake(self) p Prentice() p.make_master_cake() # 输出: 运用[古法煎饼果子配方]制作煎饼果子 p.make_school_cake() # 输出: 运用[AI煎饼果子配方]制作煎饼果子2.2 方式二super().父类功能名()特点只能访问最近的那个父类有就用没有就往后继续查找。class Prentice(School, Master): def __init__(self): self.kongfu [独创煎饼果子配方] def make_old_cake(self): super().__init__() super().make_cake() # 调用最近的父类School的方法 p Prentice() p.make_old_cake() # 调用 School 的 make_cake三、多层继承多层继承类A继承类B类B继承类C。textobject ← Master, School ← Prentice ← TuSunclass Master: def __init__(self): self.kongfu [古法煎饼果子配方] def make_cake(self): print(f运用{self.kongfu}制作煎饼果子) class School: def __init__(self): self.kongfu [AI煎饼果子配方] def make_cake(self): print(f运用{self.kongfu}制作煎饼果子) class Prentice(School, Master): def __init__(self): self.kongfu [独创煎饼果子配方] def make_cake(self): print(f运用{self.kongfu}制作煎饼果子) def make_master_cake(self): Master.__init__(self) Master.make_cake(self) def make_school_cake(self): School.__init__(self) School.make_cake(self) # 徒孙类继承 Prentice class TuSun(Prentice): pass ts TuSun() ts.make_cake() # 独创配方 ts.make_master_cake() # 古法配方 ts.make_school_cake() # AI配方四、封装与私有属性4.1 封装简介概述隐藏对象的属性和实现细节仅对外提供公共的访问方式。好处✅ 提高代码的安全性由私有化保证✅ 提高代码的复用性由函数保证弊端代码量增加了私有内容需提供公共访问方式。4.2 私有属性格式# 私有属性 __属性名 # 私有方法 __函数名()4.3 私有属性演示class Prentice: def __init__(self): self.kongfu [煎饼果子配方] self.__money 20000 # 私有属性私房钱 def make_cake(self): print(f运用{self.kongfu}制作煎饼果子) # 提供公共的访问方式 def get_money(self): return self.__money def set_money(self, money): self.__money money class TuSun(Prentice): pass ts TuSun() print(ts.kongfu) # ✅ 可以访问 # print(ts.__money) # ❌ 报错私有属性子类无法直接访问 ts.set_money(100) # ✅ 通过公共方法访问 print(ts.get_money()) # 输出: 100五、多态5.1 什么是多态专业版同一个函数接收不同的参数有不同的效果大白话同一个事物在不同时刻表现出不同的状态、形态5.2 多态的前提条件✅ 要有继承✅ 要有方法重写否则多态无意义✅ 要有父类引用指向子类对象5.3 多态案例动物叫声# 1. 定义抽象父类 class Animal: def speak(self): pass # 抽象方法 # 2. 子类重写父类方法 class Dog(Animal): def speak(self): print(狗叫: 汪汪汪) class Cat(Animal): def speak(self): print(猫叫: 喵喵喵) class Car: def speak(self): print(车叫: 滴滴滴) # 3. 定义函数接收不同对象 def make_noise(an): an.speak() # 4. 测试多态 d Dog() c Cat() car Car() make_noise(d) # 狗叫: 汪汪汪 make_noise(c) # 猫叫: 喵喵喵 make_noise(car) # 车叫: 滴滴滴不需要继承也能使用5.4 多态案例战斗平台# 英雄机1代 class HeroFighter: def power(self): return 60 # 英雄机2代继承1代 class AdvHeroFighter(HeroFighter): def power(self): return 80 # 敌机1代 class EnemyFighter: def power(self): return 70 # 战斗平台多态体现 def object_play(hero, enemy): if hero.power() enemy.power(): print(英雄机 战胜 敌机!) else: print(英雄机 惜败 敌机!) h1 HeroFighter() h2 AdvHeroFighter() e1 EnemyFighter() object_play(h1, e1) # 英雄机 惜败 敌机! object_play(h2, e1) # 英雄机 战胜 敌机!六、抽象类6.1 什么是抽象类抽象类 接口即有抽象方法的类抽象方法 没有方法体的方法方法体是pass6.2 抽象类的作用抽象类一般充当父类用于指定行业规范、准则具体的实现交由子类来完成。6.3 抽象类案例空调# 1. 定义抽象类空调规范 class AC: def cool_wind(self): # 抽象方法 pass def hot_wind(self): # 抽象方法 pass def swing_l_r(self): # 抽象方法 pass # 2. 子类实现抽象方法 class XiaoMi(AC): def cool_wind(self): print(小米 核心 制冷技术!) def hot_wind(self): print(小米 核心 制热技术!) def swing_l_r(self): print(小米空调 静音左右摆风 技术!) class Gree(AC): def cool_wind(self): print(格力 核心 制冷技术!) def hot_wind(self): print(格力 核心 制热技术!) def swing_l_r(self): print(格力空调 低频左右摆风 技术!) xm XiaoMi() xm.cool_wind() # 小米 核心 制冷技术! gree Gree() gree.cool_wind() # 格力 核心 制冷技术!七、类属性与对象属性7.1 图解text类属性 ──┬── 对象1 ── 对象属性 ├── 对象2 ── 对象属性 ├── 对象3 ── 对象属性 └── 对象4 ── 对象属性7.2 区别对比类型定义位置归属修改影响调用方式对象属性__init__方法中每个对象独有只影响当前对象对象名.属性名类属性类中、函数外类本身所有对象共享影响所有对象类名.属性名或对象名.属性名7.3 代码演示class Student: # 类属性所有对象共享 teacher_name 水镜先生 # 对象属性每个对象独有 def __init__(self, name, age): self.name name self.age age def __str__(self): return f姓名: {self.name}, 年龄: {self.age} s1 Student(曹操, 38) s2 Student(刘备, 35) # 修改对象属性 s1.name 许褚 print(s1) # 姓名: 许褚, 年龄: 40 print(s2) # 姓名: 刘备, 年龄: 35 # 修改类属性影响所有对象 Student.teacher_name 夯哥 print(s1.teacher_name) # 夯哥 print(s2.teacher_name) # 夯哥八、类方法与静态方法8.1 类方法属于类的方法可通过类名.或对象名.调用使用classmethod装饰器第一个参数必须是类对象clsclass Student: school 程序员 classmethod def show1(cls): print(fcls: {cls}) print(cls.school) print(我是类方法) # 调用 Student.show1() # 通过类名调用 s Student() s.show1() # 通过对象名调用8.2 静态方法属于该类下所有对象共享的方法使用staticmethod装饰器参数无特殊要求class Student: school 程序员 staticmethod def show2(): print(Student.school) print(我是静态方法) # 调用 Student.show2() # 通过类名调用 s Student() s.show2() # 通过对象名调用8.3 类方法与静态方法的区别对比项类方法静态方法装饰器classmethodstaticmethod第一个参数类对象cls无要求使用场景需要访问类属性/类方法时不需要访问类相关时九、dict属性__dict__是 Python 内置属性可以把对象转成字典形式。from student import Student # 1. 对象 → 字典 s1 Student(德桦, 男, 81, 111, 刻骨铭心) my_dict s1.__dict__ print(my_dict) # 输出: {name: 德桦, gender: 男, age: 81, phone: 111, desc: 刻骨铭心} # 2. 列表套对象 → 列表套字典 stu_list [s1, s2, s3] list_dict [stu.__dict__ for stu in stu_list] # 3. 字典 → 对象使用 ** 解包 my_dict {name: 德桦, gender: 男, age: 81, phone: 111, desc: 刻骨铭心} s5 Student(**my_dict) # 等价于 Student(name德桦, ...) print(s5)十、项目实战学生管理系统10.1 项目结构text学生管理系统/ ├── student.py # 学生类 ├── studentcms.py # 学生管理系统类核心业务 └── main.py # 程序入口文件10.2 学生类student.pyclass Student: def __init__(self, name, gender, age, phone, desc): self.name name self.gender gender self.age age self.phone phone self.desc desc def __str__(self): return f姓名: {self.name}, 性别: {self.gender}, 年龄: {self.age}, 手机号: {self.phone}, 描述: {self.desc}10.3 管理系统类studentcms.pyfrom student import Student import time class StudentCMS: def __init__(self): self.stu_list [] # 存储学生对象 staticmethod def show_view(): print(* * 23) print(学生管理系统V2.0版) print(\t1.添加学生信息) print(\t2.删除学生信息) print(\t3.修改学生信息) print(\t4.查询单个学生信息) print(\t5.查询所有学生信息) print(\t6.保存学生信息) print(\t0.退出系统) print(* * 23) def add_student(self): 添加学生 name input(请输入学生姓名:) gender input(请输入学生性别:) age int(input(请输入学生年龄:)) phone input(请输入学生电话:) desc input(请输入学生描述信息:) stu Student(name, gender, age, phone, desc) self.stu_list.append(stu) print(f添加 {name} 学生信息成功!\n) def del_student(self): 删除学生 del_name input(请输入要删除的学生姓名:) for stu in self.stu_list: if stu.name del_name: self.stu_list.remove(stu) print(f学员 {del_name} 信息删除成功!\n) break else: print(查无此人, 请检查后重新删除!\n) def update_student(self): 修改学生 upd_name input(请输入要修改的学生姓名:) for stu in self.stu_list: if stu.name upd_name: stu.gender input(请录入修改后的性别: ) stu.age int(input(请录入修改后的年龄: )) stu.phone input(请录入修改后的电话: ) stu.desc input(请录入修改后的描述信息: ) print(f学员 {upd_name} 信息修改成功!\n) break else: print(查无此人, 请检查后重新操作!\n) def search_one_student(self): 查询单个学生 search_name input(请输入要查找的学生姓名:) for stu in self.stu_list: if stu.name search_name: print(stu, end\n\n) break else: print(查无此人, 请检查后重新操作!\n) def search_all_student(self): 查询所有学生 if not self.stu_list: print(暂无学生信息, 请添加后查询! \n) else: for stu in self.stu_list: print(stu) print() def save_student(self): 保存学生信息到文件 with open(./stu_data.txt, w, encodingutf-8) as f: stu_dict [stu.__dict__ for stu in self.stu_list] f.write(str(stu_dict)) def load_student(self): 从文件加载学生信息 try: with open(./stu_data.txt, r, encodingutf-8) as f: stu_data f.read() stu_list eval(stu_data) self.stu_list [Student(**stu_dict) for stu_dict in stu_list] except FileNotFoundError: with open(./stu_data.txt, w, encodingutf-8) as f: pass def start(self): 启动系统 self.load_student() while True: time.sleep(1) self.show_view() input_num input(请输入您要操作的编号:) if input_num 1: self.add_student() elif input_num 2: self.del_student() elif input_num 3: self.update_student() elif input_num 4: self.search_one_student() elif input_num 5: self.search_all_student() elif input_num 6: self.save_student() print(保存学生信息成功!\n) elif input_num 0: result input(您确定要退出吗? (Y/N) - ) if result.lower() y: self.save_student() print(谢谢您的使用, 期待下次再会!) break else: print(录入有误, 请重新录入!\n)10.4 入口文件main.pyfrom studentcms import StudentCMS if __name__ __main__: stu_cms StudentCMS() stu_cms.start()10.5 功能演示text*********************** 学生管理系统V2.0版 1.添加学生信息 2.删除学生信息 3.修改学生信息 4.查询单个学生信息 5.查询所有学生信息 6.保存学生信息 0.退出系统 *********************** 请输入您要操作的编号:十一、总结11.1 核心知识点回顾知识点要点重写子类定义与父类同名的方法/属性就近原则访问父类父类名.方法(self)或super().方法()多层继承类A继承BB继承C形成继承链封装私有属性__属性名通过公共方法访问多态同一函数不同对象不同效果抽象类有抽象方法的类用于制定规范类属性属于类所有对象共享对象属性属于对象各对象独立类方法classmethod第一个参数是cls静态方法staticmethod参数无特殊要求dict对象转字典便于序列化11.2 继承体系图textobject ├── Master │ └── Prentice (多继承) │ └── TuSun └── School最后提醒面向对象编程的核心是理解类与对象的关系掌握继承、封装、多态三大特征。学生管理系统是一个综合练习项目涵盖了面向对象的所有核心知识点建议大家独立完成代码的编写。如果觉得有帮助欢迎点赞、收藏、评论

相关新闻

RapidHash:突破70GB/s的极速哈希算法,重新定义高性能数据处理

RapidHash:突破70GB/s的极速哈希算法,重新定义高性能数据处理

RapidHash:突破70GB/s的极速哈希算法,重新定义高性能数据处理 【免费下载链接】rapidhash Very fast, high quality, platform-independent hashing algorithm. 项目地址: https://gitcode.com/gh_mirrors/ra/rapidhash RapidHash是一款极速哈希算…

2026/10/9 22:30:57 阅读更多 →
从部署到实战:让 Hermes Agent 本地 AI 代理真正稳定工作

从部署到实战:让 Hermes Agent 本地 AI 代理真正稳定工作

你刚装好一个看起来功能强大的 AI Agent 框架,兴致勃勃地输入第一个指令,它却沉默了。或者,它回复了,但内容完全不是你想要的。你开始怀疑:是模型没选对?是配置写错了?还是这个工具本身就不行? 这不是假设,而是很多开发者在初次接触 Hermes Agent 这类本地 AI 代理框…

2026/10/13 10:47:01 阅读更多 →
本地搭建AI图生图环境:从原理到实战指南

本地搭建AI图生图环境:从原理到实战指南

最近在AI绘画领域,图生图技术因其强大的创作自由度备受开发者关注。本文将手把手教你搭建本地化图生图环境,从环境配置到模型加载,再到参数调优,实现真正的创作自由。无论你是想开发个性化AI绘画工具,还是希望深入研究…

2026/10/8 12:20:04 阅读更多 →

最新新闻

航空订票系统UML建模:用例图、时序图与类图实战指南

航空订票系统UML建模:用例图、时序图与类图实战指南

简介:航空订票系统是典型的信息管理系统设计案例,适合软件工程、系统分析与设计课程的学生,以及正在学习UML建模的开发者参考。资源以UML可视化建模为主线,覆盖用例图、类图、包图、顺序图、协作图、状态图、活动图、组件图与部署…

2026/10/14 11:04:13 阅读更多 →
模拟人生4 WW功能MOD安装与使用全攻略

模拟人生4 WW功能MOD安装与使用全攻略

1. 模拟人生4 WW功能MOD补丁深度解析《模拟人生4》作为一款经典的生活模拟游戏,其强大的MOD生态一直是玩家社区保持活力的关键因素。在众多功能扩展MOD中,WickedWhims(简称WW)因其丰富的动画内容和成熟的框架设计,成为…

2026/10/14 11:04:13 阅读更多 →
AI视频聚合系统架构拆解:批量复刻爆款视频的低成本工程实践

AI视频聚合系统架构拆解:批量复刻爆款视频的低成本工程实践

1. 这套系统到底在解决什么问题第一次听到“AI视频聚合系统”这个词,很多人脑子里冒出来的可能是又一个套壳工具站。但我实际拆过几个类似项目之后发现,真正跑得通的方案,核心逻辑跟“套壳”完全是两码事。它要解决的是一个非常具体的痛点&am…

2026/10/14 11:04:13 阅读更多 →
对话式开发:AI编程助手的正确使用方式与核心策略

对话式开发:AI编程助手的正确使用方式与核心策略

1. 对话式开发的认知误区与本质剖析当ChatGPT这类大语言模型刚出现时,整个开发者社区都为之震动。我们曾天真地以为,只需对着屏幕说一句"给我做个电商网站",完整的代码就会自动生成。但现实给了我们一记响亮的耳光——大多数人在短…

2026/10/14 11:04:13 阅读更多 →
UniswapV3 Periphery架构与核心模块解析

UniswapV3 Periphery架构与核心模块解析

1. UniswapV3 Periphery 架构解析 UniswapV3 Periphery 作为去中心化交易所的核心交互层,承担着将用户指令转化为底层合约调用的关键职责。这套外围合约系统通过精巧的抽象设计,在保证安全性的前提下极大简化了流动性操作的复杂度。我通过逐行阅读其Soli…

2026/10/14 11:04:13 阅读更多 →
AI时代个人量化:从零开发专属交易策略全流程

AI时代个人量化:从零开发专属交易策略全流程

AI时代最大的红利:个人做量化,也能开发出一套适合你的策略这几年AI的热度不用我多说,但很多人一提AI就想到大模型聊天、画图、写代码,真正把AI转化成个人生产力的场景,反而被我周围的量化交易玩家给玩明白了。我自己从…

2026/10/14 11:03:10 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/13 22:01:27 阅读更多 →
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/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练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/14 7:53:34 阅读更多 →