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

无奋斗不青春

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈
入 门 教 程 推 荐 :👉👉 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 = nameself.age = agedef __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 = nameself.age = ageself.pets = petsdef __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 = nameself.age = agedef __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 = nameself.age = agedef __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 = nameself.age = ageself.pets = petsdef __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 = nameself.age = agedef __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 = nameself.age = agedef __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 = nameself.age = agedef 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 = petsdef __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.mzph.cn/news/216043.shtml

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

相关文章

如何在 Git 中创建分支

1.打开命令行终端,执行以下命令来查看当前分支列表: git branch 显示当前仓库中的所有分支,以及当前所在的分支(显示为带有星号 * 的分支)。 2.创建一个新的分支,可以使用以下命令: git bran…

使用JSON-Server快速搭建RESTful API接口

​​​​​​​ 概要 随着前端技术的快速发展,前后端分离已经成为了一种趋势。在前后端分离的架构中,前端需要与后端进行数据的交互,这就需要后端提供RESTful API接口。而在开发过程中,我们常常需要模拟后端数据接口&#xf…

机器学习与低代码开发:创新驱动的双剑合璧

引言 随着科技的日新月异,机器学习和低代码开发已经成为引领技术行业变革的两大重要趋势。机器学习通过模拟人类的学习方式,让计算机具备了自我学习和预测的能力,打破了传统计算机程序的局限性。而低代码开发则以简化软件开发过程为目标&…

乐小鱼大理之行

在一个晴朗的日子里,乐小鱼和她的家人一起踏上了一场梦幻般的大理之行。他们驱车穿越沧山,眼前豁然开朗,洱海在阳光下泛着碧绿的光芒。 乐小鱼好奇地探出头,看到了连绵的山脉和湛蓝的湖水。她兴奋地说:“哇&#xff0…

1688订单详情接口使用指南:含代码实现获取订单信息

一、引言 随着电子商务的飞速发展,越来越多的企业开始通过1688平台进行采购和销售。为了更好地管理订单,提高客户满意度,许多企业选择使用1688订单详情接口来获取订单信息。本文将详细介绍如何使用1688订单详情接口,并提供示例代…

c++ multimap

multimap创建 multimap<string , string> m; m.insert(make_pair("12","3234")); m.insert(make_pair("12","3234")); m.insert(make_pair("12","3234"));遍历 multimap<string , string> m; m.inser…

.NET core 搭建一个跨平台的 Web Service

以前搭建的webservice 都是基于.NET fromwork的&#xff0c;我们知道.NET fromwork是非跨平台的&#xff0c;只能部署在iis上&#xff0c;今天教大家用.NET core搭建一个可跨平台的Web Service 新建一个.net core空项目 给项目起一个名字 选一个.net框架&#xff0c;我这里选…

iOS 定位问题解决方法整理

文章目录 一、Assertion failure in -[CLLocationManager setAllowsBackgroundLocationUpdates:] 一、Assertion failure in -[CLLocationManager setAllowsBackgroundLocationUpdates:] 后台定位权限没有开启 错误描述&#xff1a; 错误原因&#xff1a; 定位管理中设置了后…

vue编辑页面提示 this file does not belong to the project

背景 打开vue项目工程 文件夹被锁定&#xff08;有黄色背景&#xff09;&#xff0c;编辑页面时&#xff0c;报错。 报错提示&#xff1a; vue编辑页面提示 this file does not belong to the project 原因 一不下心打开了错误的文件包 解决方案 1、删除.idea文件夹 2、…

2023 年山东省职业院校技能大赛(高等职业教育) “信息安全管理与评估”样题

2023 年山东省职业院校技能大赛&#xff08;高等职业教育&#xff09; “信息安全管理与评估”样题 目录 任务 1 网络平台搭建&#xff08;50 分&#xff09; 任务 2 网络安全设备配置与防护&#xff08;250 分&#xff09; 模块二 网络安全事件响应、数字取证调查、应用程序安…

李飞飞携斯坦福联袂谷歌推出比肩Pika的视频生成模型W.A.L.T

英国数据保护监管机构敦促公司在使用人工智能&#xff08;AI&#xff09;时认真考虑人们的隐私权&#xff0c;否则不仅可能面临罚款&#xff0c;还可能失去公众对该技术的信任。信息专员约翰爱德华兹在周三的一次演讲中表示&#xff0c;公司在使用AI时必须在所有情况下保护客户…

高效代码静态分析神器:Understand for Mac

Understand是一款针对程序员设计的代码静态分析软件&#xff0c;不仅可以有效率的查看、审查代码&#xff0c;而且还能够用于维护&#xff0c;测量和分析关键或大型代码库。 Understand Mac版 源代码审查工具特色亮点 1、支持多语言&#xff1a;Ada, C, C, C#, Java, FORTRAN…

牛客周赛 Round 22(C、D题解)

C、小红的数组构造&#xff08;思维&#xff09; 一、题目要求 链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 题目描述 小红想让你构造一个长度为 n 的数组&#xff0c;满足以下三个条件&#xff1a; 1. 该数组最大值不超过 k。 2. 该数…

MyBatisPlus简介

1 简介 MyBatis-Plus&#xff08;简称 MP&#xff09;是一个 MyBatis的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 2、特性 无侵入 只做增强不做改变&#xff0c;引入它不会对现有工程产生影响&#xff0c;如丝般顺滑…

bootstrap:下拉菜单

<!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>下拉菜单DEMO</title> <link rel"stylesheet" type"text/css" href"/cdn.bootcss.com/bootstrap/3.3.2/css/bootstrap.min.css"…

数据结构:栈(Stack)的各种操作(入栈,出栈,判断栈非空,判断栈已满,附源码)

前言&#xff1a;在前面的文章中&#xff0c;我们讲解了顺序表&#xff0c;单链表&#xff0c;双向链表。而我们今天要分享的栈则是基于之前的数据结构上搭建的&#xff0c;但是相较于顺序表和链表来说&#xff0c;栈的实现就非常简单了。 目录 一.栈(Stack)的概念 二.栈的数…

算法设计复习题

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

windows下docker环境安装

开启硬件虚拟化技术 win10中开启 Hyper-V Win10 下是否开启硬件虚拟化技术&#xff0c;在控制面板&#xff0c;启用 window 功能&#xff0c;找到 Hyper-V 选项&#xff0c;点勾选确认。如图&#xff1a; Windows 11 家庭中文版新增 Hyper-V选项 注意以下的解决方案来自win1…

FFmpeg之AVHWAccel

这也是ffmpeg解码器中比较重要的一个模块&#xff0c;很多人认识它应该是通过一条命令 ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input.mp4 -c:v h264_nvenc -b:v 5M output.mp4命令地址&#xff1a;英伟达ffmpeg 大家可能觉得这就是nvcodec了&#xff0c;后来发…

PS不按比例裁剪图片

点击左侧的裁剪工具后&#xff0c;然后点击底部工具栏中的清除选项。