实验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. MatrixOne从入门到实战04——MatrixOne的连接和建表

    MatrixOne从入门到实战--MatrixOne的连接和建表 前景回顾 前几篇文章,为大家介绍了MatrixOne这个产品,以及编译.部署MatrixOne的服务. 直通车: MatrixOne从 ...

  2. C++和Java多维数组声明和初始化时的区别与常见问题

    //C++只有在用{}进行初始化的时候才可以仅仅指定列数而不指定行数,因为可以通过直接//初始化时的元素个数自动计算出行数.而仅声明/创建数组而不初始化时,Cpp要求必须写明//行数和列数才能够创建数 ...

  3. 个人音乐博客 h5、css和js等

    浅说一下吧 这个小项目由h5和css还有js和jq写的 主题内容为个人音乐 博客等 首页一级导航栏 以及侧边栏 整合部分图标(侧边栏未添加收起操作 时间原因 会的朋友们可以自行添加一个动画就可以 在m ...

  4. Docker | 容器互联互通

    上篇讲到创建自定义网络,我创建了 mynet 网络,并指定了网关和子网地址.在上篇结尾呢,我抛出了一个问题:其它网络下的容器可以直接访问mynet网络下的容器吗?今天就让我们一块看下怎么实现容器互联. ...

  5. NOI2011阿狸的打字机

    题目链接 昨天晚上yy出了一个做法后,感觉...好难打啊...,于是先回去休息.今天来打时,还是感觉细节好多,于是就打了两个小时.打完过了编译后,居然过了样例,直接交,尼玛居然过了???......还 ...

  6. 中国制霸生成器「GitHub 热点速览 v.22.42」

    火遍推特的中国制霸生成器本周一开源就占据了两天的 GitHub Trending 榜,不知道你的足迹遍布了多少个省份呢?同样记录痕迹的 kanal 用了内存读写方式解决了 Rust 的消息处理问题,P ...

  7. 知识图谱-生物信息学-医学顶刊论文(Bioinformatics-2021)-MUFFIN:用于DDI预测的多尺度特征融合

    2.(2021.3.15)Bioinformatics-MUFFIN:用于DDI预测的多尺度特征融合 论文标题: MUFFIN: multi-scale feature fusion for drug ...

  8. pycharm安装第三方的包

    这里以安装selenium为例子 在file下找到settings 在弹出的窗口点击python interpreter ,然后在右侧点击[+] 在弹窗顶部输入要导入的包名,在下方列表找到对应包后,点 ...

  9. 第一百零六篇:变量的不同声明(var,let和const的不同)

    好家伙,JS基础接着学, 本篇内容为<JS高级程序设计>第三章学习笔记 1.变量 ECMAScript 变量是松散类型的,意思是变量可以用于保存任何类型的数据. (确实松散,不像C或C++ ...

  10. Byte和byte的区别

    Byte和byte的区别 背景 今天学习网络编程中,在建立Udp连接时,使用byte[]数组接收传输的数据,但是byte[]错写为Byte[],导致错误.    //接收数据:         Byt ...