实验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章)的更多相关文章

  1. Python实验报告——第4章 序列的应用

    实验报告 [实验目的] 1.掌握python中序列及序列的常用操作. 2.根据实际需要选择使用合适的序列类型. [实验条件] 1.PC机或者远程编程环境. [实验内容] 1.完成第四章 序列的应用 实 ...

  2. Python实验报告——第3章 流程控制语句

    实验报告 [实验目的] 1.掌握python中流程控制语句的使用,并能够应用到实际开发中. [实验条件] 1.PC机或者远程编程环境 [实验内容] 1.完成第三章流程控制语句实例01-09,实战一到实 ...

  3. Python实验报告——第2章 Python语言基础

    实验报告 [实验目的] 1.熟悉在线编程平台. 2.掌握基本的 python 程序编写.编译与运行程序的方法. [实验条件] 1.PC机或者远程编程环境 [实验内容] 1.完成第二章实例01-07,实 ...

  4. python实验报告(第五周)

    一.实验目的和要求 学会使用字符串的常用操作方法和正确应用正则表达式. 二.实验环境 软件版本:Python 3.10 64_bit 三.实验过程 1.实例1:使用字符串拼接输出一个关于程序员的笑话 ...

  5. Python实验报告(第四周

    一.实验目的和要求 学会应用列表.元组.字典等序列: 二.实验环境 软件版本:Python 3.10 64_bit 三.实验过程 1.实例1:输出每日一贴 (1)在IDLE中创建一个名称为tips.p ...

  6. Python 实验报告(第三周)

    一.实验目的和要求 1.熟练运用常见选择结构: 2.熟练运用for循环和while循环: 3.理解带else语句的循环结构执行过程和break.continue语句在循环中的作用. 二.实验环境 软件 ...

  7. 2017-2018-2 20165315 实验四《Android程序设计》实验报告

    2017-2018-2 20165315 实验四<Android程序设计>实验报告 第24章:初识Android Android Studio项目的目录树 1 build:该目录包含了自动 ...

  8. Python程序设计实验报告一:熟悉IDLE和在线编程平台

    安徽工程大学 Python程序设计 实验报告 班级   物流191   姓名  崔攀  学号3190505136 成绩_____           日期     2020.3.8     指导老师  ...

  9. Python程序设计实验报告二:顺序结构程序设计(验证性实验)

      安徽工程大学 Python程序设计 实验报告 班级   物流191   姓名  崔攀  学号3190505136 成绩 日期     2020.3.22     指导老师       修宇 [实验 ...

  10. Python程序设计实验报告四:循环结构程序设计(设计型实验)

    安徽工程大学 Python程序设计 实验报告 班级   物流191   姓名  姚彩琴  学号3190505129 成绩 日期     2020.4.8     指导老师       修宇 [实验名称 ...

随机推荐

  1. JavaWeb505错误,IDEA版问题解决

    问题描述: 在学习JavaWeb的过程中,使用JSP文件转至servlet文件的过程中,发现无论如何都无法打开文件 JSP文件代码 <%@page contentType="text/ ...

  2. PHP全栈开发:在本机上创建虚拟主机与域名

    如何在windows+wamp环境上进行自己创建的网站的域名访问 step 1 在wamp的安装目录,如C:\wamp64\www\下创建自己的网站目录pe step 2 右键wamp图标,在wamp ...

  3. HDU1561 The more, The Better(树形背包)

    通过这道题对树形背包理解更深一步...... 有几个地方需要注意: 1.本题数据结构为森林,需增加一个超根作为根节点,M+=1(后面解释). 2.本题有拓扑序的限制,通过vector建成的一棵树中,必 ...

  4. 关于多个 Kubernetes 集群指标的采集操作

    简介 在使用观测云期间,有时需要针对一个工作空间接入多个 Kubernetes 集群指标,通过观测云提供的全局 Tag 的方式来进行区分,大大提高了效率.下面是我总结的操作步骤. 当集群中只有一个采集 ...

  5. SSM(Spring,SpringMVC,Mybatis)框架整合项目

    快速上手SSM(Spring,SpringMVC,Mybatis)框架整合项目 环境要求: IDEA MySQL 8.0.25 Tomcat 9 Maven 3.6 数据库环境: 创建一个存放书籍数据 ...

  6. SpringMVC入手项目注解版

    SpringMVC入手项目注解版 1.创建Maven项目在pom.xml文件引入相关的依赖 <dependencies> <dependency> <groupId> ...

  7. 《吐血整理》高级系列教程-吃透Fiddler抓包教程(28)-Fiddler如何抓取Android7.0以上的Https包-下篇

    1.简介 虽然依旧能抓到大部分Android APP的HTTP/HTTPS包,但是别高兴的太早,有的APP为了防抓包,还做了很多操作:① 二次加密有的APP,在涉及到关键数据通信时,会将正文二次加密后 ...

  8. JetBrains Fleet初体验,如何运行一个java项目

    序言 各位好啊,我是会编程的蜗牛,JetBrains 日前宣布其打造的下一代 IDE Fleet 正式推出公共预览版,现已开放下载.作为java开发者,对于JetBrains开发的全家桶可以说是印象深 ...

  9. python不确定性计算之粗糙集属性约简

    粗糙集属性约简 本实验同时采用区别矩阵和依赖度约简. 在依赖度约简中,设置依赖度计算函数和相对约简函数,对读取的数据进行处理,最后根据依赖度约简. 在读取数据后判断有无矛盾,若有则进行决策表分解,然后 ...

  10. C++智能指针的enable_shared_from_this和shared_from_this机制

    前言 之前学习muduo网络库的时候,看到作者陈硕用到了enable_shared_from_this和shared_from_this,一直对此概念是一个模糊的认识,隐约记着这个机制是在计数器智能指 ...