百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

python进阶-Day2: 面向对象编程 (OOP)

off999 2025-07-03 18:49 45 浏览 0 评论

以下是为 Python 进阶 Day 2 设计的学习任务,专注于面向对象编程(OOP)的核心概念和高阶特性。代码中包含详细注释,帮助理解每个部分的实现和目的。


任务目标:

  1. 复习 OOP 基础:类、对象、继承、多态。
  2. 学习高级 OOP 特性:@property 装饰器、抽象基类 (ABC)、方法解析顺序 (MRO)。
  3. 练习:设计一个简单的“动物”类层次结构,综合应用所学内容。

学习任务设计:

  1. 复习基础 OOP
  2. 创建一个基类 Animal,并派生出子类 Dog 和 Cat,展示继承和多态。
  3. 学习高级 OOP
  4. 使用 @property 装饰器管理属性访问。
  5. 使用抽象基类 (ABC) 强制子类实现特定方法。
  6. 通过 mro() 方法探索方法解析顺序。
  7. 练习
  8. 实现一个动物类层次结构,包含属性管理和抽象方法。

代码实现(带详细注释):

python

# 导入抽象基类模块
from abc import ABC, abstractmethod

# 任务 1:复习基础 OOP - 定义基类 Animal
class Animal:
    def __init__(self, name, age):
        self._name = name  # 受保护属性,使用单下划线
        self._age = age    # 受保护属性

    def speak(self):
        # 定义一个默认的 speak 方法,子类可以覆盖(多态)
        return "I can speak!"

    def get_info(self):
        # 返回动物的基本信息
        return f"Name: {self._name}, Age: {self._age}"


# 任务 1:继承与多态 - 定义子类 Dog
class Dog(Animal):
    def speak(self):
        # 多态:覆盖父类的 speak 方法
        return "Woof Woof!"


# 任务 1:继承与多态 - 定义子类 Cat
class Cat(Animal):
    def speak(self):
        # 多态:覆盖父类的 speak 方法
        return "Meow Meow!"


# 任务 2:学习 @property 装饰器 - 定义一个带属性管理的类
class Bird(Animal):
    def __init__(self, name, age, wingspan):
        super().__init__(name, age)  # 调用父类的构造函数
        self._wingspan = wingspan    # 私有属性,表示翼展

    @property
    def wingspan(self):
        # 使用 @property 装饰器,将 wingspan 作为只读属性
        return self._wingspan

    @wingspan.setter
    def wingspan(self, value):
        # 使用 @setter 控制 wingspan 的赋值,确保值有效
        if value <= 0:
            raise ValueError("Wingspan must be positive!")
        self._wingspan = value


# 任务 2:学习抽象基类 (ABC) - 定义抽象基类
class AbstractAnimal(ABC):
    @abstractmethod
    def move(self):
        # 抽象方法,子类必须实现
        pass

    def eat(self):
        # 普通方法,提供默认实现
        return "I am eating!"


# 任务 2:实现抽象基类的子类
class Fish(AbstractAnimal, Animal):  # 多重继承:从抽象基类和 Animal 继承
    def __init__(self, name, age):
        Animal.__init__(self, name, age)

    def move(self):
        # 实现抽象方法 move
        return "I swim in water!"

    def speak(self):
        # 覆盖 Animal 的 speak 方法
        return "Blub Blub!"


# 任务 3:综合练习 - 测试代码
def main():
    # 测试基础 OOP
    dog = Dog("Buddy", 3)
    cat = Cat("Whiskers", 2)
    print(dog.get_info())      # 输出: Name: Buddy, Age: 3
    print(dog.speak())         # 输出: Woof Woof!
    print(cat.get_info())      # 输出: Name: Whiskers, Age: 2
    print(cat.speak())         # 输出: Meow Meow!

    # 测试 @property 装饰器
    bird = Bird("Eagle", 5, 2.5)
    print(bird.get_info())     # 输出: Name: Eagle, Age: 5
    print(bird.wingspan)       # 输出: 2.5
    bird.wingspan = 3.0        # 使用 setter 修改 wingspan
    print(bird.wingspan)       # 输出: 3.0
    # bird.wingspan = -1       # 取消注释将抛出 ValueError

    # 测试抽象基类和多重继承
    fish = Fish("Nemo", 1)
    print(fish.get_info())     # 输出: Name: Nemo, Age: 1
    print(fish.move())         # 输出: I swim in water!
    print(fish.speak())        # 输出: Blub Blub!
    print(fish.eat())          # 输出: I am eating!

    # 任务 2:探索方法解析顺序 (MRO)
    print(Fish.mro())          # 输出 Fish 的方法解析顺序


if __name__ == "__main__":
    main()

学习任务分解与说明:

  1. 复习 OOP 基础
  2. Animal 类作为基类,定义了属性 _name 和 _age,以及方法 speak 和 get_info。
  3. Dog 和 Cat 继承自 Animal,通过重写 speak 方法实现多态。
  4. 高级 OOP:
  5. @property
  6. 装饰器
  7. Bird 类使用 @property 和 @wingspan.setter 管理 wingspan 属性,确保属性访问的安全性和封装性。
  8. 高级 OOP:抽象基类 (ABC)
  9. AbstractAnimal 定义了一个抽象方法 move,子类 Fish 必须实现它。
  10. 通过多重继承,Fish 同时继承了 AbstractAnimal 和 Animal 的功能。
  11. 高级 OOP:方法解析顺序 (MRO)
  12. 使用 Fish.mro() 查看类的继承顺序,帮助理解多重继承时的解析规则。
  13. 综合练习
  14. main() 函数测试所有功能,展示类层次结构的行为。

练习任务:

  1. 修改 Animal 类,添加一个新属性(如 weight),并用 @property 管理它。
  2. 创建一个新的子类(如 Snake),继承 AbstractAnimal 和 Animal,实现 move 和 speak 方法。
  3. 尝试引发一个多重继承的冲突(如两个父类都有同名方法),并用 mro() 分析解析顺序。

这个设计涵盖了 OOP 的核心概念和高阶特性,通过注释和实践帮助深入理解 Python 的面向对象编程。

相关推荐

bios能看到硬盘 开机找不到硬盘

bios里可以看到硬盘,说明硬盘已经被主板识别。进系统找不到,可能硬盘没分区,或者硬盘是动态磁盘,还没有导入或激活。按win+r,输入diskmgmt.msc回车,就打开磁盘管理了,在里面可以给新硬盘...

找回qq聊天记录的方法(找回qq聊天记录怎么找)
  • 找回qq聊天记录的方法(找回qq聊天记录怎么找)
  • 找回qq聊天记录的方法(找回qq聊天记录怎么找)
  • 找回qq聊天记录的方法(找回qq聊天记录怎么找)
  • 找回qq聊天记录的方法(找回qq聊天记录怎么找)
无线网有个红叉(无线网有个红叉,搜索不到网络)

连接失败,路由坏换路由,外网坏,报修无线网络处出现红叉表示设备无法正常工作。请检查网卡驱动是否正常,无线网络开关是否打开。解决方法:查看电脑是否有无线网络开关,且是否打开。进入设备管理器检查网卡驱动是...

thinkpad笔记本官网首页(thinkpad官方商城)

官方网站 国内:http://www.thinkworld.com.cn   国内用户只需要访问国内即可。  ThinkPad,中文名为“思考本”,在2005年以前是IBMPC事业部旗下的便携式计算机...

win7什么版本最好用(win7哪个版本最稳定流畅)

Windows7旗舰版,最好,最稳定。Windows7,是由微软公司(Microsoft)开发的操作系统,内核版本号为WindowsNT6.1。Windows7可供选择的版本有:简易版(Sta...

win7自带虚拟光驱怎么使用(win7系统虚拟光驱安装教程)

以DAEMONTools为例,360软件管家里面就有最新版的下.安装后使用方法如下:第一种方法:在虚拟光驱界面中,你先按一下中间工具栏最左边“+”符号的按钮,添加镜像文件(可以一次添加多个),这...

电脑装系统蓝屏(电脑装系统蓝屏重启开不了机)

蓝屏的原因往往集中在不兼容的硬件和驱动程序、有问题的软件、病毒等。解决办法:1、病毒的原因。使用电脑管家杀毒。2、内存的原因。用橡皮擦把内存条的金手指擦拭一下,把氧化层擦掉,确保内存条安装、运行正常。...

u盘安装软件(u盘安装软件到电视)

第一种情况:软件安装包可以直接下载的。在电脑上将软件安装包下载到本地硬盘,然后将下载好软件安装包拷贝到U盘上即可拿到别的电脑上去安装。分可为exe格式的和rar格式,exe格式直接安装,rar格式的解...

microsoft官网账户注册(microsoft 帐户注册)

要创建Microsoft账户,您可以按照以下步骤进行操作:1.打开任意一个支持浏览器的设备,如电脑、手机或平板电脑。2.在浏览器中输入"Microsoft账户注册"或直接访问Mic...

outlookcom官网(outlook online archive auto)
  • outlookcom官网(outlook online archive auto)
  • outlookcom官网(outlook online archive auto)
  • outlookcom官网(outlook online archive auto)
  • outlookcom官网(outlook online archive auto)
显示器闪屏是什么原因(显示器闪屏是哪里坏了)

解决方法:  一、接触不良导致的显示器闪屏  先查看主机和显示器的电源线连接,是否松动,重新插拔一下电源线。  二、信号干扰导致的显示器闪屏  1、连接显示器的电缆线是否没有屏蔽线圈,如果没有防干扰的...

国产linux操作系统(国产linux操作系统有什么版本)

中国对于操作系统的探索其实并不晚。  早在20世纪60年代中期中国就开始操作系统的研发,那时的比尔·盖茨还只是个迷恋计算机的小字辈,南京大学教授孙钟秀、北京大学杨芙清院士等都是我国操作系统的拓荒者...

免费无需排队的云电脑(不需要排队的云电脑)

目前市场上有一些云游戏平台提供无限时长且无需排队的服务。这些平台通常采用先进的云计算技术和高性能服务器,能够提供稳定流畅的游戏体验。用户可以随时登录并畅玩游戏,无需等待排队。这些平台还提供多种游戏选择...

视频播放器下载量排名(2020视频播放器排行榜)
  • 视频播放器下载量排名(2020视频播放器排行榜)
  • 视频播放器下载量排名(2020视频播放器排行榜)
  • 视频播放器下载量排名(2020视频播放器排行榜)
  • 视频播放器下载量排名(2020视频播放器排行榜)
wps官方下载(wps官方下载官网电脑版网址)

具体的步骤如下:1、首先在电脑上打开浏览器,在浏览器中输入“WPS”,找到WPS官方网站。2、接下来进入WPS官方网站中,找到WPS软件,点击“免费下载”。3、点击下载后在弹出来的对话框中修改下载位置...

取消回复欢迎 发表评论: