✅包含编程资料、学习路线图、源代码、软件安装包等!【[点击这里]】!
1.类的基本概念(烤红薯案例)
1classKaohongshu:2"""烤红薯的类"""34def__init__(self):5self.level=0# 烘烤程度6self.condition="生的"# 状态78defcook(self,time):9self.level+=time10# 根据烘烤时间更新状态11ifself.level>8:12self.condition="烤成灰了"13elifself.level>5:14self.condition="烤好了"15elifself.level>3:16self.condition="半生不熟"17else:18self.condition="生的"1920definfo(self):21print(f"烤了{self.level}分钟,状态:{self.condition}")2223# 使用示例24digua=Kaohongshu()25digua.cook(2)26digua.info()# 输出:烤了2分钟,状态:生的
关键点:
- __init__是初始化方法,创建对象时自动执行
- self表示对象实例本身
3.方法可以修改对象的属性(如cook方法修改level)
二、类的继承(父子关系)
- 就像孩子继承父母的特征(如眼睛像妈妈,嘴巴像爸爸)
1. 继承的概念
继承是指一个类(子类)可以继承另一个类(父类)的属性和方法。子类可以直接使用父类的属性和方法,也可以扩展或修改父类的行为。
- 定义:子类自动获取父类的属性和方法,无需重复编写相同代码
- 优势:代码复用、逻辑分层、扩展性增强
继承关系:
- 父类(基类):提供基础功能
- 子类(派生类):继承基础功能并扩展新特性
示例代码
1classPerson:2"""人类基类"""3def__init__(self,name,age,gender):4self.name=name# 实例属性:姓名5self.age=age# 实例属性:年龄6self.gender=gender# 实例属性:性别78defhello(self):9"""问候方法"""10print(f"你好,我的名字是{self.name},我的年龄是{self.age}岁,我的性别是{self.gender}。")1112defbirthday(self):13"""年龄增长方法"""14self.age+=115print(f"生日快乐!我现在{self.age}岁了。")1617# 实例化测试18laifu=Person("来福",20,"男")19laifu.hello()# 输出:你好,我的名字是来福...20laifu.birthday()# 年龄+1并打印提示
继承实践
1classSon(Person):# 继承Person类的所有功能2pass# 空实现,仅继承34# 子类实例化5beibei=Son("蓓蓓",18,"女")6beibei.hello()# 直接调用继承的方法7beibei.birthday()# 调用继承的方法
2.🌱 所有类的"老祖宗":object类
- 就像人类有共同的祖先一样。Python中所有类都默认继承一个叫Object的基类(即时没有显示的写出来)。
写法如下所示:
1# 写法1:显式继承object(推荐)2classDog(object):3pass45# 写法2:隐式继承object(Python3会自动补上)6classCat:7pass89# 验证继承关系10print(Dog.__bases__)# 输出:(<class 'object'>,)11print(Cat.__bases__)# 输出:(<class 'object'>,)
![]()
object类的作用
它给所有类预装了基础能力,比如:
- init:初始化方法
- str:打印对象时的字符串
- repr:调试显示的字符串
…等
3.继承的基本用法
1classAnimal:# 父类2defeat(self):3print("动物会吃东西")45classDog(Animal):# 子类 // 在括号内写入父类的名称,就是继承6defbark(self):7print("狗会汪汪叫")89# 使用示例10xiaobai=Dog()11xiaobai.eat()# 继承父类方法12xiaobai.bark()# 调用自己的方法
语法总结:
- 1.继承语法:class 子类名(父类名)
- 2.子类自动获得父类的所有方法
- 3.子类可以自由添加新方法
3. 方法重写(儿子改进爸爸的方法)
1classCat(Animal):2defeat(self):# 重写父类方法3print("猫吃鱼时会发出呼噜声")45# 使用示例6miaomiao=Cat()7miaomiao.eat()# 输出:猫吃鱼时会发出呼噜声
语法总结:
- 1.重写条件:子类方法与父类同名
- 2.执行规则:调用时优先使用子类的方法
- 3.常见场景:让方法实现更符合子类特性
三、多继承
1classPainter:2defdraw(self):3print("会画画🎨")45classMusician:6defplay(self):7print("会弹琴🎹")89# 多继承10classStudent(Painter,Musician):11defstudy(self):12print("还会学习📚")1314# 使用15xiaoli=Student()16xiaoli.draw()# 来自Painter17xiaoli.play()# 来自Musician18xiaoli.study()# 自己的方法
1. 基础用法
1classSinger:2defsing(self):3print("🎵 正在唱歌...")45classDancer:6defdance(self):7print("💃 正在跳舞...")89classSuperStar(Singer,Dancer):# 继承多个父类10pass1112# 使用示例13star=SuperStar()14star.sing()# 继承歌手能力15star.dance()# 继承舞者能力
2. 同名方法处理规则
1classTeacher:2defskill(self):3print("📚 会讲课")45classChef:6defskill(self):7print("👨🍳 会做饭")89classSuperMan(Teacher,Chef):10pass1112# 使用示例13clark=SuperMan()14clark.skill()# 输出:📚 会讲课(优先继承写在前面的父类)
⚠️ 继承顺序规则(MRO)
当多个父类有同名方法时:
- 1.按继承顺序从左到右查找
- 2.使用类名.__mro__查看继承顺序
- 3.示例:
1classPainter:2defdraw(self):3print("会画画🎨")45classMusician:6defplay(self):7print("会弹琴🎹")89# 多继承10classStudent(Painter,Musician):11defstudy(self):12print("还会学习📚")1314# 使用15xiaoli=Student()16xiaoli.draw()# 来自Painter17xiaoli.play()# 来自Musician18xiaoli.study()# 自己的方法19# 查看继承顺序20print(Student.__mro__)
![]()
3.多继承综合案例(奶茶师傅的配方之争)
📜 代码案例解析
1classYidiandian:# 一点点师傅2def__init__(self):3self.kongfu="一点点奶茶配方"# 秘方属性45defmake_tea(self):6print(f"👨🍳 按照《{self.kongfu}》制作奶茶")78defchouyan(self):9print("🚬 偷偷抽了根华子")1011classXicha:# 喜茶师傅12def__init__(self):13self.kongfu="喜茶奶茶配方"1415defmake_tea(self):16print(f"👩🍳 按照《{self.kongfu}》制作奶茶")1718defdrink(self):19print("🍺 下班喝了杯啤酒")2021classCainiao(Yidiandian,Xicha):# 继承两位师傅22def__init__(self):23self.kongfu="自研奶茶配方"# 覆盖父类配方24# pass # 注释掉时使用父类配方2526# 创建学徒对象27tudi=Cainiao()
1️⃣ 属性继承规则
![]()
2️⃣ 方法调用顺序
1tudi.make_tea()2# 输出:👨🍳 按照《自研奶茶配方》制作奶茶
执行逻辑:
- 1.优先使用子类自己的 kongfu 属性
- 2.调用继承链中第一个父类(Yidiandian)的 make_tea 方法
所以,运行结果如下:
![]()
3️⃣ 非冲突方法继承
1tudi.chouyan()# 🚬 来自一点点师傅2tudi.drink()# 🍺 来自喜茶师傅
![]()
🧙MRO魔法解析
1print(Cainiao.__mro__)2# 输出:(<class '__main__.Cainiao'>, <class '__main__.Yidiandian'>, <class '__main__.Xicha'>, <class 'object'>)
四、课上练习
题目一:多继承基础
- 要求:创建三个类(A/B/C),C继承A和B,并调用所有方法
1classA:2defmethod_A(self):3print("这是A类方法 → 来自父类A的核心能力")45classB:6defmethod_B(self):7print("这是B类方法 → 来自父类B的专属技能")89classC(A,B):# 👑 多重继承10defmethod_C(self):11print("这是C类方法 → 子类自主研发的新功能")1213# 使用示例14super_c=C()15super_c.method_A()# 🅰 继承自A16super_c.method_B()# 🅱 继承自B17super_c.method_C()# © 自有方法1819""" 20 输出结果: 21 这是A类方法 → 来自父类A的核心能力 22 这是B类方法 → 来自父类B的专属技能 23 这是C类方法 → 子类自主研发的新功能 24 """
![]()
题目二:多继承应用
1classPainters:2defdraw(self):3print("🎨 绘制《星空》完成 → 来自画家基因")45classMusicians:6defplay(self):7print("🎹 演奏《月光曲》完成 → 继承音乐天赋")89classStudents(Painters,Musicians):10definfo(self):11print("\n🌟 学霸技能展示:")12self.draw()# 调用画家父类方法13self.play()# 调用音乐家父类方法14print("📚 额外技能:量子物理研究")# 自有功能1516# 使用示例17xiaoming=Students()18xiaoming.info()1920""" 21 输出结果: 22 🌟 学霸技能展示: 23 🎨 绘制《星空》完成 → 来自画家基因 24 🎹 演奏《月光曲》完成 → 继承音乐天赋 25 📚 额外技能:量子物理研究 26 """
![]()
题目三:三重继承实战
1classAnimal:2defrun(self):3print("🏃♂️ 陆地疾驰 → 继承动物奔跑能力")45classBirds:6deffly(self):7print("🕊️ 高空翱翔 → 获得鸟类飞行特性")89classFishes:10defswim(self):11print("🏊♂️ 深水潜游 → 融合鱼类游泳技能")1213classDuck(Animal,Birds,Fishes):14definfo(self):15print("\n🦆 鸭王能力展示:")16self.run()# 动物类方法17self.fly()# 鸟类方法18self.swim()# 鱼类方法19print("🥇 特殊技能:铁锅炖自己")# 鸭子专属2021# 使用示例22super_duck=Duck()23super_duck.info()2425""" 26 输出结果: 27 🦆 鸭王能力展示: 28 🏃♂️ 陆地疾驰 → 继承动物奔跑能力 29 🕊️ 高空翱翔 → 获得鸟类飞行特性 30 🏊♂️ 深水潜游 → 融合鱼类游泳技能 31 🥇 特殊技能:铁锅炖自己 32 """
![]()
![]()
🟢总结
- 最后希望你编程学习上不急不躁,按照计划有条不紊推进,把任何一件事做到极致,都是不容易的,加油,努力!相信自己!
🟡文末福利
- 最后这里免费分享给大家一份Python全套学习资料,希望能帮到那些不满现状,想提升自己却又没有方向的朋友,也可以和我一起来学习交流呀。
🔴包含编程资料、学习路线图、源代码、软件安装包等!【[点击这里]】领取!
- ① Python所有方向的学习路线图,清楚各个方向要学什么东西
- ② 100多节Python课程视频,涵盖必备基础、爬虫和数据分析
- ③ 100多个Python实战案例,学习不再是只会理论
- ④ 华为出品独家Python漫画教程,手机也能学习
✅可以扫描下方二维码领取【保证100%免费】![]()