Python实验报告(第7章)
实验7:面向对象程序设计
一、实验目的和要求
1、了解面向对象的基本概念(对象、类、构造方法);
2、学会类的定义和使用;
3、掌握属性的创建和修改;
4、掌握继承的基本语法。
二、实验环境
软件版本:Python 3.10 64_bit
三、实验过程
1、实例01:创建大雁类并定义飞行方法
(1)在IDLE中创建一个名称为geese.py的文件,然后在该文件中定义一个大雁类Geese,并定义一个构造方法,然后再定义一个实例方法fly(),该方法有两个参数,一个是self,另一个用于指定飞行状态,最后再创建大雁类的实例,并调用实例方法fly(),代码如下:
1 class Geese: #创建 大雁类
2 '''大雁类'''
3 def __init__(self,beak,wing,claw): #构造方法
4 print("我是大雁类!我有以下特征:")
5 print(beak) #输出喙的特征
6 print(wing)
7 print(claw)
8 def fly(self,state): #定义飞行方法
9 print(state)
10 '''************************调用方法***********************************'''
11 beak_1 = "喙的基部较高,长度和头部的长度几乎相等" #定义新的属性
12 wing_1 = "翅膀长而尖"
13 claw_1 = "爪子是蹼状的"
14 wildGoose = Geese(beak_1,wing_1,claw_1) #创建新的对象wildGoose并制定其属性
15 wildGoose.fly("我飞行的时候一会儿排成个人字,一会排成个一字")
(2)运行结果如下:
2、实例02:通过类属性统计类的实例个数
(1)在IDLE中创建一个名称为geese_a.py的文件,然后在该文件中定义一个雁类Geese,并在该类中定义4个类属性,前3个用于记录雁类的特征,第4个用于记录实例编号,然后定义一个构造方法,在该构造方法中将记录实例编号的类属性进行+1操作,并输出4个类属性的值,最后通过for循环创建4个雁类的实例,代码如下:
1 class Geese:
2 '''雁类'''
3 neck = "脖子较长" #定义属性
4 wing = "振翅频率较高"
5 leg = "腿位于身体的中心支点,行走自如"
6 number = 0 #用于计数
7 def __init__(self): #创建方法(函数)
8 Geese.number += 1
9 print("\n我是第"+str(Geese.number)+"只大雁,我属于雁类!我有以下特征:")
10 print(Geese.neck)
11 print(Geese.wing)
12 print(Geese.leg)
13 list1 =[] #定义一个空列表
14 for i in range (4): #循环4次
15 list1.append(Geese()) #创建一个雁类的实例
16 print("一共有"+str(Geese.number)+"只大雁") #统计总数
(2)运行结果如下:
3、实例03:在模拟电影点播功能时应用属性
(1)在IDLE中创建一个名称为film.py的文件,然后在该文件中定义一个电视节目类TVshow,并在该类中定义一个类属性,用于保存电影列表,然后在__init__()方法中定义一个私有的实例属性,再讲该类型转换为可读取、可修改(有条件进行)的属性,最后创建类的实例,并获取和修改属性值,代码如下:
1 class TVshow:
2 list_film = ["战狼2","红海行动","西游记女儿国","熊出没·变形记"] #建立电影列表
3 def __init__(self,show): #文件加密,仅可读
4 self.__show = show
5 @property #将一个方法转换为属性
6 def show(self): #定义show()方法
7 return self.__show #返回私有属性的值
8 @show.setter #设置setter方法:让属性可修改
9 def show(self,value):
10 if value in TVshow.list_film: #判断电影是否存在
11 self.__show = "您选择了《"+ value +"》,稍后将播放" #返回修改的值
12 else:
13 self.__show = "您点播的电影不存在"
14 tvshow = TVshow("战狼2") #新建实例tvshow
15 print("正在播放:《",tvshow.show,"》") #获取属性值
16 print("您可以从",tvshow.list_film,"中选择要点播的电影")
17 tvshow.show = "红海行动" #修改属性值
18 print(tvshow.show)
(2)运行结果如下:
·如果将第17行代码中的“红海行动”修改为“捉妖记”,将显示如下内容
4、实例04:创建水果基类及其派生类
(1)在IDLE中创建一个名称为fruit.py的文件,然后在该文件中定义一个水果类Fruit(作为基类),并在该类中定义一个类属性(用于保存水果默认颜色)和一个harvest()方法,然后创建Apple类和Orange类,都继承自Fruit类,最后创建Apple类和Orange类的实例,并调用harvest()方法(在基类中编写),代码如下:
1 class Fruit: #定义水果类(父类)
2 color = "绿色" #定义属性
3 def harvest(self,color): #创建实例方法harvest(两个参数)
4 print("水果是:"+color+ "的!")
5 print("水果已经收获……")
6 print("水果原来是:"+Fruit.color+"的!")
7 class Apple(Fruit): #定义苹果类(子类)
8 color = "红色" #重新定义子类的color属性
9 def __init__(self): #文件加密,仅可读
10 print("我是苹果")
11 class Orange(Fruit):
12 color = "橙色"
13 def __init__(self):
14 print("\n我是橘子")
15
16 apple = Apple() #创建新实例
17 apple.harvest(apple.color) #调用apple的harvest方法,以()为新属性
18 orange = Orange()
19 orange.harvest(orange.color)
(2)运行结果如下:
5、实例05:在派生类中调用基类的__init__()方法定义类属性
(1)在IDLE中创建一个名称为fruit.py的文件,然后在该文件中定义一个水果类Fruit(作为基类),并在该类中定义__init__()方法,在该方法中定义一个类属性(用于保存水果默认的颜色),然后再Fruit类中定义一个harvest()方法,再创建Apple类和Sapodilla类,都继承自Fruit类,最后创建Apple类和Sapodilla类的实例,并调用harvest()方法(在基类中编写),代码如下:
1 class Fruit: #定义水果类(基类)
2 def __init__(self,color = "绿色"): #文件加密,仅可读
3 Fruit.color = color
4 def harvest(self,color): #创建实例方法harvest(两个参数)
5 print("水果是:"+self.color+"的!") #输出的是形式参数color
6 print("水果已经收获……")
7 print("水果原来是:"+Fruit.color+"的!")
8 class Apple(Fruit):
9 color = "红色"
10 def __init__(self):
11 print("我是苹果")
12 super().__init__() #调用基类的__init__()方法
13 class Sapodilla(Fruit): #定义人参果类(派生类)
14 def __init__(self,color):
15 print("\n我是人参果")
16 super().__init__(color)
17 def harvest(self,color): #重写harvest()方法
18 print("人参果是:"+Fruit.color+"的!")
19 print("人参果已经收获……")
20 print("人参果原来是:"+Fruit.color+"的!")
21 apple = Apple()
22 apple.harvest(apple.color) #调用harvest()方法
23 sapodilla = Sapodilla("白色")
24 sapodilla.harvest("金黄色带紫色条纹") #修改函数的color参数
(2)运行结果如下:
6、实战01:修改手机默认语言
(1)在IDLE中创建一个名称为language.py的文件,然后在该文件中定义一个手机类,并且为该类创建两个构造方法,其中一个构造方法moren()将手机的默认语言设置为英文,另一个构造方法chongzhi()可修改参数值language,然后再创建两个手机类的实例,分别输出两个构造方法的应用,代码如下:
1 class Mobile: #定义手机类
2 def moren(self,language = "英语"): #语言参数的默认值为 英语
3 print("智能手机的默认语言为"+language)
4 def chongzhi(self,language):
5 print("将智能手机的默认语言设置为"+language) #修改参数language的值
6 moren = Mobile() #建立Mobile类的新实例
7 moren.moren() #调用moren()方法
8 xiugai1 = Mobile()
9 xiugai1.chongzhi("中文")
(2)运行结果如下:
7、实战02:给信用卡设置默认密码
(1)在IDLE中创建一个名称为cardpassport.py的文件,然后在该文件中创建信用卡类,并且为该类创建一个构造方法,该构造方法有三个参数,分别是self、卡号和密码。其中默认密码为123456,在创建实例中,如果不指定密码就采用默认密码,否则要重置密码,代码如下:
1 class Card: #定义信用卡类
2 def infor(self,cardid ="4013735633800642",passport="123456"):#cardid passport参数设置默认值
3 print("信用卡"+cardid+"的默认密码为"+passport)
4 def chongzhi(self,passport,cardid ="4013735633800642"):
5 print("重置信用卡"+cardid+"的密码为"+passport) #修改参数language的值
6 begin = Card() #建立Card类的新实例
7 begin.infor() #调用moren()方法
8 after = Card()
9 after.chongzhi(passport='168779')
(2)运行结果如下:
8、实战03:打印每月销售明细
(1)在IDLE中创建一个名称为printsale.py的文件,模拟实现输出进销存管理系统中的每月销售明细,运行程序,输入要查询的月份,如果输入的月份存在销售明细,则显示本月商品销售明细;如果输入的月份不存在或不是数字,则提示“改越没有销售数据或者输入的月份有误!”,代码如下:
1 class SaleHandler: #定义销售类
2 '''销售管理类'''
3 def __init__(self): #定义字典{key:value[列表]}
4 self.__sale_data = {"2":[('T0001','笔记本电脑'),('T0002','华为荣耀6X'),('T0003','iPad'),
5 ('T0004','华为荣耀V9'),('T0005','MacBook')]}
6 def outputSaleList(self,query_month): #query_month ?
7 '''根据输入月份,查询商品明细'''
8 if query_month in self.__sale_data:
9 print("%s月份商品销售明细如下:"%query_month) # %query_month ?
10 for item in self.__sale_data[query_month]:
11 print("商品编号:%s\t商品名称:%s"%item)
12 else:
13 print("该月份没有销售数据或输入月份有误!")
14 print("—"*10+"销售明细"+"—"*10)
15 sh = SaleHandler()
16 while(True): #循环结构
17 month = input("请输入要查询的月份(比如1、2、3等):")
18 if month =='0': #跳出循环的值
19 break
20 sh.outputSaleList(month)
(2)运行结果如下:
9、实战04:模拟电影院的自动售票机选票页面
(1)在IDLE中创建一个名称为zidongsale.py的文件,模拟电影院自动售票机中自动选择电影场次的页面,使其可以自动选择合适的场次,代码如下:
1 import time
2 timenow = time.strftime("%Y.%m.%d",time.localtime())
3 print("\n欢迎使用自动售票机~~")
4
5 print("\n请选择正在上映的电影:1、《长津湖》\t2、《战狼2》\t3、《红海行动》")
6 dy = input("已选电影:")
7
8 print("\n请选择电影播放场次:1、9:30\t2、10:40\t3、12:00")
9 cc = input("电影场次:")
10
11 print("\n请选择座位剩余座位:10-10,10-02,10-03,10-04")
12 zw = input("选择座位:")
13
14 print("\n正在出票。。。")
15 print("电影:",dy)
16 print("播出时间:",timenow,cc)
17 print("座位:",zw)
18 print("\n出票完成,请别忘记取票")
(2)运行结果如下:
Python实验报告(第7章)的更多相关文章
- Python实验报告——第4章 序列的应用
实验报告 [实验目的] 1.掌握python中序列及序列的常用操作. 2.根据实际需要选择使用合适的序列类型. [实验条件] 1.PC机或者远程编程环境. [实验内容] 1.完成第四章 序列的应用 实 ...
- Python实验报告——第3章 流程控制语句
实验报告 [实验目的] 1.掌握python中流程控制语句的使用,并能够应用到实际开发中. [实验条件] 1.PC机或者远程编程环境 [实验内容] 1.完成第三章流程控制语句实例01-09,实战一到实 ...
- Python实验报告——第2章 Python语言基础
实验报告 [实验目的] 1.熟悉在线编程平台. 2.掌握基本的 python 程序编写.编译与运行程序的方法. [实验条件] 1.PC机或者远程编程环境 [实验内容] 1.完成第二章实例01-07,实 ...
- python实验报告(第五周)
一.实验目的和要求 学会使用字符串的常用操作方法和正确应用正则表达式. 二.实验环境 软件版本:Python 3.10 64_bit 三.实验过程 1.实例1:使用字符串拼接输出一个关于程序员的笑话 ...
- Python实验报告(第四周
一.实验目的和要求 学会应用列表.元组.字典等序列: 二.实验环境 软件版本:Python 3.10 64_bit 三.实验过程 1.实例1:输出每日一贴 (1)在IDLE中创建一个名称为tips.p ...
- Python 实验报告(第三周)
一.实验目的和要求 1.熟练运用常见选择结构: 2.熟练运用for循环和while循环: 3.理解带else语句的循环结构执行过程和break.continue语句在循环中的作用. 二.实验环境 软件 ...
- 2017-2018-2 20165315 实验四《Android程序设计》实验报告
2017-2018-2 20165315 实验四<Android程序设计>实验报告 第24章:初识Android Android Studio项目的目录树 1 build:该目录包含了自动 ...
- Python程序设计实验报告一:熟悉IDLE和在线编程平台
安徽工程大学 Python程序设计 实验报告 班级 物流191 姓名 崔攀 学号3190505136 成绩_____ 日期 2020.3.8 指导老师 ...
- Python程序设计实验报告二:顺序结构程序设计(验证性实验)
安徽工程大学 Python程序设计 实验报告 班级 物流191 姓名 崔攀 学号3190505136 成绩 日期 2020.3.22 指导老师 修宇 [实验 ...
- Python程序设计实验报告四:循环结构程序设计(设计型实验)
安徽工程大学 Python程序设计 实验报告 班级 物流191 姓名 姚彩琴 学号3190505129 成绩 日期 2020.4.8 指导老师 修宇 [实验名称 ...
随机推荐
- uni-app 如何优雅的使用权限认证并对本地文件上下起手
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 1.起因 最近有一个需求,需要使用自定义插件,来对接硬件功能,需要配合对手机的权限进行判断和提示,并在对接后对本地文件进行操作,这里给大家 ...
- 《吐血整理》高级系列教程-吃透Fiddler抓包教程(29)-Fiddler如何抓取Android7.0以上的Https包-终篇
1.简介 上一篇宏哥介绍的Xposed是一款可以在不修改APK的情况下影响程序运行的框架.可以编写并加载自己编写的插件app,实现对目标apk的注入.拦截等.一般研究移动安全的都会使用Xposed. ...
- Docker之介绍与安装
Docker 说明 本章,我们主要从Docker简介.Docker中几个核心概念和Docker安装这几个方面对Docker进行介绍! 1. Docker 简介 1.1. 什么是 Docker Dock ...
- .NET中的拦截器filter的使用
拦截器的使用 使用场景分析 我们先想像一个场景,就是程序员开发软件,他是怎么工作的呢?我们都知道,普通的程序员只需要根据需求文档开发相应的功能即可,他不用和客户谈论软件需求,不用理会软件卖多少钱,他要 ...
- day02-HTML02
4.HTML 4.3HTML基本标签 4.3.9表格(table)标签 基本语法: <table border="边框宽度" cellspacing="空隙大小&q ...
- HTML躬行记(3)——WebRTC视频通话
WebRTC 在创建点对点(P2P)的连接之前,会先通过信令服务器交换两端的 SDP 和 ICE Candidate,取两者的交集,决定最终的音视频参数.传输协议.NAT 打洞方式等信息. 在完成媒体 ...
- Django系列---开发一
参考 杜赛: https://www.dusaiphoto.com/article/2/ 官方文档: https://docs.djangoproject.com/en/3.2/ 开发环境 # 基本 ...
- Vue3组件间传值
12种方式 1. 父组件 ./father.vue 点击查看代码 <template> <h1>father:</h1> <h3>子组件传过来的:{{ ...
- fastjson远程代码执行漏洞
fastjson漏洞学习记录 免责声明: Fastjson 1.2.24 远程代码执行漏洞 漏洞说明 前提条件 影响范围 漏洞复现 Fastjson<=1.2.47 远程代码执行漏洞 Fastj ...
- 阿里技术专家详解 DDD 系列- Domain Primitive
简介: 关于DDD的一系列文章,希望能继续在总结前人的基础上发扬光大DDD的思想,但是通过一套我认为合理的代码结构.框架和约束,来降低DDD的实践门槛,提升代码质量.可测试性.安全性.健壮性. 作者| ...