实验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)运行结果如下:

 

 

posted on 2022-10-23 18:26  Mandeluda  阅读(301)  评论(0编辑  收藏  举报