当前位置: 首页 > backend >正文

6个月Python学习计划 Day 17 - 继承、多态与魔术方法

第三周 Day 4

🎯 今日目标

  • 理解类的继承和方法重写
  • 掌握多态思想及其实际应用
  • 了解并使用常见的魔术方法(如 strlen 等)

🧬 类的继承(Inheritance)

Python 支持单继承与多继承,常用语法如下:

class 子类名(父类名):...

✅ 示例:定义一个继承自 Person 的 Student 类

class Person:def __init__(self, name):self.name = namedef introduce(self):print(f"我是 {self.name}")class Student(Person):def __init__(self, name, school):super().__init__(name)self.school = schooldef introduce(self):print(f"我是学生 {self.name},来自 {self.school}")
p = Person("李雷")
p.introduce()s = Student("韩梅梅", "清华大学")
s.introduce()

🌀 多态(Polymorphism)

多态强调:“一种接口,多种实现”

class Animal:def speak(self):print("动物在叫")class Dog(Animal):def speak(self):print("狗在汪汪叫")class Cat(Animal):def speak(self):print("猫在喵喵叫")def make_sound(animal):animal.speak()make_sound(Dog())  # 狗在汪汪叫
make_sound(Cat())  # 猫在喵喵叫

🎯 多态的优势在于:无需关心对象具体类型,只关心它是否有该方法。

✨ 魔术方法(Magic Methods)

魔术方法是 Python 中以双下划线开头和结尾的特殊方法,用于自定义类的行为。

方法名用途
init构造函数
str字符串显示
len返回长度
eq等于比较

✅ 示例:自定义打印格式

class Book:def __init__(self, title):self.title = titledef __str__(self):return f"《{self.title}》"
b = Book("流浪地球")
print(b)  # 输出:《流浪地球》

🧪 今日练习任务

✅ 练习1:定义 Employee 父类,Manager 子类,重写介绍方法

class Employee:def __init__(self, name):self.name = namedef work(self):print(f"{self.name} 正在工作")class Manager(Employee):def work(self):print(f"{self.name} 正在管理团队")m = Manager("Alice")
m.work()

✅ 练习2:定义一个 Team 类,使用 lenstr 魔术方法

class Team:def __init__(self, members):self.members = membersdef __len__(self):return len(self.members)def __str__(self):return f"团队成员有:{', '.join(self.members)}"t = Team(["张三", "李四", "王五"])
print(len(t))       # 3
print(str(t))       # 团队成员有:张三, 李四, 王五

✅ 练习3:模拟一个宠物乐园,定义父类 Pet,子类 Dog 和 Cat,并在统一函数中调用各自的 sound() 方法(体现多态)

class Pet:def sound(self):passclass Dog(Pet):def sound(self):print("汪汪!")class Cat(Pet):def sound(self):print("喵喵~")def pet_speak(pet):pet.sound()pet_speak(Dog())
pet_speak(Cat())

🧾 今日总结

核心概念说明
继承子类可以继承父类的属性和方法
方法重写子类可以覆盖父类中的方法
多态同一个接口,传入不同对象呈现不同行为
魔术方法Python 内置的特殊函数,用于定制对象表现
http://www.xdnf.cn/news/12897.html

相关文章:

  • 快速上手Linux文本流编辑器sed
  • 智慧城市项目总体建设方案(Word700页+)
  • 基于深度强化学习的智能机器人导航系统
  • 黑马Javaweb Request和Response
  • 05.查询表
  • 【无人机】地面站crazyfile-cfclient免安装方法,Python3.10的整体环境配置打包
  • OCS2库及其在足式机器人上的应用
  • RK3568项目(七)--uboot系统之外设与PMIC详解
  • 真实案例分享,Augment Code和Cursor那个比较好用?
  • PDF 转 Word 工具 拖拽秒转可编辑文档,批量处理保留原格式
  • 用通俗的话解释下MCP是个啥?
  • android 模拟器如何进行单模块更新
  • 【设计模式】1.简单工厂、工厂、抽象工厂模式
  • ORACLE 修改端口号之后无法启动?
  • 港理工:LLM推理与推荐能力集成
  • ElGamal加密算法:离散对数难题的安全基石
  • (五)Linux性能优化-CPU-性能优化
  • GitOps 核心思想 - 当 Git 成为唯一信源
  • 2025-04-22-X86 架构与 Arm 架构异同及应用
  • Keil Mdk新建stm32工程找不到对应芯片开发包的解决方法
  • LeetCode - 148. 排序链表
  • Jupyter notebook的文章结构目录查看方式和汉化方法
  • 基于Matlab肺结节分割(肺结节提取)源程序,也有GUI人机界面版本。使用传统图像分割方法,非深度学习方法。使用LIDC-IDRI数据集。
  • RoseMirrorHA 双机热备全解析
  • Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
  • Unity VR/MR开发-开发环境准备
  • JS设计模式(5): 发布订阅模式
  • 矩阵详解:从基础概念到实际应用
  • 词法分析和词性标注 自然语言处理
  • Python Cookbook-7.13 生成一个字典将字段名映射为列号