038.Python面向对象_三大特性综合案例1

news2024/9/20 18:54:30

无奋斗不青春

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈
入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈
虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈
PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈
Oracle数据库教程:👉👉 Oracle数据库文章合集 👈👈
优 质 资 源 下 载 :👉👉 资源下载合集 👈👈

分隔线

三大特性综合案例1

    • 三大特性综合案例1
      • 案例要求
      • 怎样通过代码解决问题
      • 代码实现

三大特性综合案例1

案例要求

# 定义三个类:小狗、小猫、人
# 小狗:
    # 姓名、年龄(默认1岁)
    # 吃饭、玩、睡觉、看家 (格式:名字是xx,年龄xx岁的小狗在xx)
# 小猫:
    # 姓名、年龄(默认1岁)
    # 吃饭、玩、睡觉、捉老鼠 (格式:名字是xx,年龄xx岁的小猫在xx)
# 人:
    # 姓名、年龄(默认1岁)、宠物
    # 吃饭、玩、睡觉 (格式:名字是xx,年龄xx岁的小猫在xx)
    # 养宠物(让所有的宠物吃饭、玩、睡觉)
    # 让宠物工作(让所有的宠物根据自己的职责开始工作)

怎样通过代码解决问题

  • 1、有开发经验的
    • 根据自己的开发经验,制定出一套自以为完美的解决方案,通过代码实现这个方案
  • 2、无开发经验的
    • 有进取心的:提出问题 —— 直接通过代码实现能够想到的问题,检测发现代码问题,重构代码,不断的去升级方案
    • 无进取心的:提出问题 —— 直接通过代码实现能够想到的问题

代码实现

  • 第一版:首先实现Dog类
    class Dog:
        def __init__(self, name, age=1):
            self.name = name
            self.age = age
    
        def __str__(self):
            return f'名字是{self.name}, 年龄{self.age}岁的小狗正在'
    
        def eat(self):
            print(f'{self}吃饭...')
    
        def play(self):
            print(f'{self}玩耍...')
    
        def sleep(self):
            print(f'{self}睡觉...')
    
        def watch(self):
            print(f'{self}看家...')
    
    
    d = Dog('小黑')
    d.eat()
    
  • 第二版:实现Cat类和Person类(基本与Dog类一致,可以直接复制修改即可)
    class Person:
        def __init__(self, name, pets, age=1):
            self.name = name
            self.age = age
            self.pets = pets
    
        def __str__(self):
            return f'名字是{self.name}, 年龄{self.age}岁,正在'
    
        def eat(self):
            print(f'{self}吃饭...')
    
        def play(self):
            print(f'{self}玩耍...')
    
        def sleep(self):
            print(f'{self}睡觉...')
    
        def yangPets(self):
            for pet in self.pets:
                pet.eat()
                pet.play()
                pet.sleep()
    
        def pets_work(self):
            for pet in self.pets:
                if isinstance(pet, Dog):
                    pet.watch()
                elif isinstance(pet, Cat):
                    pet.catch()
    
    class Cat:
        def __init__(self, name, age=1):
            self.name = name
            self.age = age
    
        def __str__(self):
            return f'名字是{self.name}, 年龄{self.age}岁的小猫正在'
    
        def eat(self):
            print(f'{self}吃饭...')
    
        def play(self):
            print(f'{self}玩耍...')
    
        def sleep(self):
            print(f'{self}睡觉...')
    
        def catch(self):
            print(f'{self}捉老鼠...')
    
    
    class Dog:
        def __init__(self, name, age=1):
            self.name = name
            self.age = age
    
        def __str__(self):
            return f'名字是{self.name}, 年龄{self.age}岁的小狗正在'
    
        def eat(self):
            print(f'{self}吃饭...')
    
        def play(self):
            print(f'{self}玩耍...')
    
        def sleep(self):
            print(f'{self}睡觉...')
    
        def watch(self):
            print(f'{self}看家...')
    
    
    d = Dog('小黑')
    d.eat()
    
  • 第三版:在这里就发现了问题,两种动物的工作方法用了两种不同的方法名称,所以在人类中调用的时候需要判断类型,再根据类型调用不同的方法,后续再增加新的动物,那就需要再增加更多的判断。
  • 解决方法:我们可以把所有动物工作的方法名进行统一,后续在调用工作的方法的时候就不需要再进行判断了
    class Person:
        def __init__(self, name, pets, age=1):
            self.name = name
            self.age = age
            self.pets = pets
    
        def __str__(self):
            return f'名字是{self.name}, 年龄{self.age}岁,正在'
    
        def eat(self):
            print(f'{self}吃饭...')
    
        def play(self):
            print(f'{self}玩耍...')
    
        def sleep(self):
            print(f'{self}睡觉...')
    
        def yangPets(self):
            for pet in self.pets:
                pet.eat()
                pet.play()
                pet.sleep()
    
        def pets_work(self):
            for pet in self.pets:
                pet.work()
    
    class Cat:
        def __init__(self, name, age=1):
            self.name = name
            self.age = age
    
        def __str__(self):
            return f'名字是{self.name}, 年龄{self.age}岁的小猫正在'
    
        def eat(self):
            print(f'{self}吃饭...')
    
        def play(self):
            print(f'{self}玩耍...')
    
        def sleep(self):
            print(f'{self}睡觉...')
    
        def work(self):
            print(f'{self}捉老鼠...')
    
    
    class Dog:
        def __init__(self, name, age=1):
            self.name = name
            self.age = age
    
        def __str__(self):
            return f'名字是{self.name}, 年龄{self.age}岁的小狗正在'
    
        def eat(self):
            print(f'{self}吃饭...')
    
        def play(self):
            print(f'{self}玩耍...')
    
        def sleep(self):
            print(f'{self}睡觉...')
    
        def work(self):
            print(f'{self}看家...')
    
    
    d = Dog('小黑')
    d.eat()
    
  • 第四版:在上面的代码中可以发现有很多相同的部分,造成了大量的冗余代码,比如吃饭、睡觉、玩耍这些方法,在三个类中都写了一遍…
  • 解决方案:我们可以将这些共有的特性提取出来封装到一个父类中,然后这些具体的类都继承这个父类就可以了
    class Animall:
        def __init__(self, name, age=1):
            self.name = name
            self.age = age
    
        def eat(self):
            print(f'{self}吃饭...')
    
        def play(self):
            print(f'{self}玩耍...')
    
        def sleep(self):
            print(f'{self}睡觉...')
    
    
    class Person(Animall):
        def __init__(self, name, pets, age=1):
            super(Person, self).__init__(name, age)
            self.pets = pets
    
        def __str__(self):
            return f'名字是{self.name}, 年龄{self.age}岁,正在'
    
        def yangPets(self):
            for pet in self.pets:
                pet.eat()
                pet.play()
                pet.sleep()
                print('')
    
        def pets_work(self):
            for pet in self.pets:
                pet.work()
    
    
    class Cat(Animall):
        def __str__(self):
            return f'名字是{self.name}, 年龄{self.age}岁的小猫正在'
    
        def work(self):
            print(f'{self}捉老鼠...')
    
    
    class Dog(Animall):
        def __str__(self):
            return f'名字是{self.name}, 年龄{self.age}岁的小狗正在'
    
        def work(self):
            print(f'{self}看家...')
    
    
    d1 = Dog('小黑')
    d2 = Dog('小黄')
    c1 = Cat('小花')
    c2 = Cat('小白')
    
    p = Person('失心疯',[d1, d2, c1, c2], 36)
    # p.pets_work()
    p.yangPets()
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1304402.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

书-二分查找找某个数字p155

#include<stdio.h> int main(){int a[10]{1,4,5,6,7,8,23,34,90,14567};int mid;int low0;int high9;while(low<high){mid(lowhigh)/2;//数组分成两段&#xff0c;前一段low-mid&#xff0c;后一段mid-highif (a[mid]<23)//因为已经是排序好的了&#xff0c;所以如…

Android获取Wifi网关

公司有这样一个应用场景&#xff1a;有一台球机设备&#xff0c;是Android系统的&#xff0c;它不像手机&#xff0c;它没有触摸屏幕&#xff0c;所以我们对球机的操作很不方便&#xff0c;于是我们搞这样一个设置&#xff1a;点击球机电源键5次分享出一个热点&#xff0c;然后…

高德地图已达成全球最大规模车道级导航覆盖

近日&#xff0c;高德地图宣布旗下基于北斗卫星导航系统、深度学习模型、惯性导航、泛在信号等前沿技术研发的车道级导航服务&#xff0c;截止目前已支持在国内99%以上的城市和乡镇道路使用。 这意味着即日起&#xff0c;用户在驾车导航时&#xff0c;无论是在城市还是乡镇&am…

AI大模型专题报告:AI大模型及应用加速落地,持续带动算力产业链发展

今天分享的AI系列深度研究报告&#xff1a;《AI大模型专题报告&#xff1a;AI大模型及应用加速落地&#xff0c;持续带动算力产业链发展》。 &#xff08;报告出品方&#xff1a;长城证券&#xff09; 报告共计&#xff1a;23页 1.行业观点 在 TMT 各子板块&#xff1a;电子…

算法设计复习题

一、选择 1.算法要对异常情况进行适当的处理&#xff0c;就是算法的&#xff08;&#xff09;。 A、正确性 B、可用性 C、健壮性 D、可行性 2.&#xff08; &#xff09;指的是算法中描述的操作都可以通过已经实现的基本操作运算有限次实现。 A、可靠性 B、正确性 C、有效性 …

什么是shell?

系统内核是操作系统的基本组成部分&#xff0c;它负责管理系统的硬件和软件资源&#xff0c;并提供一组基本的系统服务。内核是操作系统的核心&#xff0c;控制着计算机的所有主要功能&#xff0c;包括内存管理、进程管理、设备驱动程序、系统调用和安全防护等。内核在计算机中…

python实战教学之python版“张万森,好久不见”

前言 WINTER IS COMING 最近《一闪一闪亮星星》的电影在火热预售中&#xff0c;家人们抢到票了嘛&#xff0c;前两天小编写了一篇“张万森&#xff0c;下雪了”的文章后&#xff0c;收到了不少小伙伴的反馈&#xff1a;“代码的运行结果只有文字&#xff0c;没有雪花啊”&#…

腾讯-轻量应用服务器centos7中宝塔安装MySQL8.0出现内存不足

目录 前言 出现的问题: 解决方法&#xff1a; 编译安装&#xff1a; 极速安装 其他 我的其他博客 前言 说实话&#xff0c;本人也就是个穷学生买不起啥大的服务器啥的&#xff0c;整了个2核 2内存的服务器 用宝塔按mysql5.5是没问题的&#xff0c;一切换8.0就提醒内存不足…

【NLP】RAG 应用中的调优策略

​ 检索增强生成应用程序的调优策略 没有一种放之四海而皆准的算法能够最好地解决所有问题。 本文通过数据科学家的视角审视检索增强生成&#xff08;RAG&#xff09;管道。它讨论了您可以尝试提高 RAG 管道性能的潜在“超参数”。与深度学习中的实验类似&#xff0c;例如&am…

OpenAI 在中国申请 GPT-6、GPT-7 商标;Google 推迟发布 OpenAI 竞品 Gemini 至明年 1 月【无际Ai资讯】

天眼查 app 显示&#xff0c;近日&#xff0c;欧爱运营有限责任公司&#xff08;OPENAI OPCO&#xff0c;LLC&#xff09;申请多枚「GPT-6」「GPT-7」商标&#xff0c;国际分类为科学仪器、网站服务&#xff0c;当前商标状态均为等待实质审查。 此前 OpenAI CEO Sam Altman 在接…

若依源码分析

一.登录 1.1 生成验证码 基本思路 后端生成一个表达式,74?11 74?转成图片,传到前端进行展示 将结果11存入redis 前端代码实现: 请求后端地址:http://localhost/dev-api/captchaImage,通过反向代理解决前后端跨域问题,将请求路径变为:http://localhost:8080/captchaImag…

音频接口芯片GC8416,GC1809,GC8418的芯片描述与比较分析

GC8416 192KHZ数字音频接收芯片 工作电流在32~192之间&#xff0c;可替代CS8416/CIRRUS LOGIC GC1809&#xff0c;GC8418都是24位&#xff0c;192KHZ音频接收芯片 工作电流最高可达192 可替代MS8413

大数据驱动下的人口普查:新时代下的新变革

人口普查数据大屏&#xff0c;是指一种通过大屏幕显示人口普查数据的设备&#xff0c;可以将人口普查数据以可视化的形式呈现出来&#xff0c;为决策者提供直观、准确的人口数据。这种大屏幕的出现&#xff0c;让人口普查数据的利用变得更加高效、便捷。 如果您需要制作一张直观…

Redis7--基础篇8(集群cluster)

1. 集群&#xff08;cluster&#xff09;介绍 由于数据量过大&#xff0c;单个Master复制集难以承担&#xff0c;因此需要对多个复制集进行集群&#xff0c;形成水平扩展每个复制集只负责存储整个数据集 的一部分&#xff0c;这就是Redis的集群&#xff0c;其作用是提供在多个…

Android工程怎么调用C/C++代码(保姆级别,每一步截图+讲解)?

文章目录 背景新建工程拷贝/编写C/C代码编写CMake配置文件写Java代码加载动态/静态库java转换c&#xff0c;c转javanative层打印日志Android去调用Java层的native方法对外提供.so/.a库 jar包检查APK里面是否已经被正常包含.so/.a完成 背景 突然想起做了这么久的JNI开发&#…

(新手必看)自定义数据传输通信协议+STM32代码详解

前言 本篇博客主要学习和了解一些单片机协议的格式&#xff0c;在对传输大数据或者要求准确性的时候&#xff0c;都需要通过协议来发送接收&#xff0c;下面通过了解协议的基本构成和代码来分析和实现协议的发送和接收。本篇博客大部分是自己收集和整理&#xff0c;如有侵权请联…

图的搜索(二):贝尔曼-福特算法、狄克斯特拉算法和A*算法

图的搜索&#xff08;二&#xff09;&#xff1a;贝尔曼-福特算法、狄克斯特拉算法和A*算法 贝尔曼-福特算法 贝尔曼-福特&#xff08;Bellman-Ford&#xff09;算法是一种在图中求解最短路径问题的算法。最短路径问题就是在加权图指定了起点和终点的前提下&#xff0c;寻找从…

【教3妹学编程-算法题】下一个更大元素 IV

3妹&#xff1a;“太阳当空照&#xff0c;花儿对我笑&#xff0c;小鸟说早早早&#xff0c;你为什么背上炸药包” 2哥 :3妹&#xff0c;什么事呀这么开发。 3妹&#xff1a;2哥你看今天的天气多好啊&#xff0c;阳光明媚、万里无云、秋高气爽&#xff0c;适合秋游。 2哥&#x…

计算机网络:应用层(一)

我最近开了几个专栏&#xff0c;诚信互三&#xff01; > |||《算法专栏》&#xff1a;&#xff1a;刷题教程来自网站《代码随想录》。||| > |||《C专栏》&#xff1a;&#xff1a;记录我学习C的经历&#xff0c;看完你一定会有收获。||| > |||《Linux专栏》&#xff1…

STM32单片机项目实例:基于TouchGFX的智能手表设计(4)LPBAM的应用

STM32单片机项目实例&#xff1a;基于TouchGFX的智能手表设计&#xff08;4&#xff09;LPBAM的应用 目录 一、概述 二、LPBAM简介 2.1 支持 LPBAM 的外设 三、LPBAM硬件机制 3.1 电源和时钟架构 3.2 速度限制 3.3 LPGPIO_IOToggle实验 一、概述 STM32U5 系列微控制器基…