实验7:面对对象程序设计
一、实验目的和要求
1、学会类的定义和使用;
2、学会创建属性;
3、实现类的继承。
二、实验环境
软件版本:Python 3.10 64_bit
三、实验过程
1、实例1:创建大雁类并定义飞行方法
(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) # 创建大雁类的实例 15 wildGoose.fly("我飞行的时候,一会儿排成个人字,一会排成个一字") # 调用实例方法
(2)运行结果如图所示:
2、实例2:通过类属性统计类的实例个数
(1)在IDLE中创建一个名称为geese_a.py的文件,然后在该文件中定义一个雁类Geese,并在该类中定义4个类属性,前三个用于记录雁类的特征,第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 # 将编号加1 9 print("\n我是第" + str(Geese.number) + "只大雁,我属于雁类!我有以下特征:") 10 print(Geese.neck) # 输出脖子的特征 11 print(Geese.wing) # 输出翅膀的特征 12 print(Geese.leg) # 输出腿的特征 13 # 创建4个雁类的对象(相当于有4只大雁) 14 list1 = [] 15 for i in range(4): # 循环4次 16 list1.append(Geese()) # 创建一个雁类的实例 17 print("一共有" + str(Geese.number) + "只大雁")
(2)运行结果如图所示:
3、实例3:在模拟电影点播功能时应用属性
(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): 7 return self.__show 8 @show.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") 15 print("正在播放:《",tvshow.show,"》") 16 print("您可以从",tvshow.list_film,"中选择要点播放的电影") 17 tvshow.show = "红海行动" 18 print(tvshow.show)
(2)运行结果如图所示:
4、实例4:创建水果基类及其派生类
(1)在IDLE中创建一个名称为fruit.py的文件,然后在该文件中定义一个水果类Fruit(作为基类),并在该类中定义一个类属性(用于保存水果默认的颜色)和一个harvest()方法,然后创建Apple类和Orange类,都继承自Fruit类,最后创建Apple类和Orange类,都继承自Fruit类,最后创建Apple类和Orange类的实例,并调用harvest()方法(在基类中编写)。代码如下:
1 class Fruit: 2 color = "绿色" 3 def harvest(self,color): 4 print("水果是:" + color + "的!") 5 print("水果已经收获……") 6 print("水果原来是:" + Fruit.color + "的!") 7 class Apple(Fruit): 8 color = "红色" 9 def __init__(self): 10 print("我是苹果") 11 class Orange(Fruit): 12 color = "橙色" 13 def __init__(self): 14 print("我是橘子") 15 apple = Apple() 16 apple.harvest(apple.color) 17 orange = Orange() 18 orange.harvest(orange.color)
(2)运行结果如图所示:
5、实例5:在派生类中调用基类的__init__()方法定义类属性
(1)在IDLE中创建一个名称为fruit_a.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): 5 print("水果是:" + self.color + "的!") 6 print("水果已经收获……") 7 print("水果原来是:" + Fruit.color + "的!") 8 class Apple(Fruit): 9 color = "红色" 10 def __init__(self): 11 print("我是苹果") 12 super().__init__() 13 class Sapodilla(Fruit): 14 def __init__(self,color): 15 print("\n我是人参果") 16 super().__init__(color) 17 # 重写harvest()方法的代码 18 def harvest(self,color): 19 print("人参果是:" + color + "的!") 20 print("人参果已经收获……") 21 print("人参果原来是:" + Fruit.color + "的!") 22 apple = Apple() 23 apple.harvest(apple.color) 24 sapodilla = Sapodilla("白色") 25 sapodilla.harvest("金黄色带紫色条纹")
(2)运行结果如图所示:
6、实战一:导演为剧本选主角
(1)智能手机的默认语言为英文,但制作手机时可以将默认语言设置为中文。编写手机类,采用无参构造方法时,表示使用默认语言设计,利用有参构造方法时,修改手机的默认语言。代码如下:
1 class Mobile: 2 def __init__(self,language = "英文"): 3 if language == "英文": 4 print("智能手机的默认语言为" + language) 5 else: 6 print("将智能手机的默认语言设置为" + language) 7 phone1 = Mobile() 8 phone2 = Mobile("中文")
(2)运行结果如图所示:
7、实战二:给信用卡设置默认密码
(1)创建信用卡类,并且为该类创建一个构造方法,该构造方法有3个参数,分别是self、卡号和密码。其中,密码可以设置一个默认值123456,代表默认密码。在创建类的实例的时,如果不指定密码,就采用默认密码,否则就要重置密码。代码如下:
1 class Card: 2 def __init__(self,cardid,password = "123456"): 3 self.cardid = cardid 4 self.password = password 5 if password == "123456": 6 print("信用卡" + self.cardid + "的默认密码为"+ self.password) 7 else: 8 print("重置信用卡" + self.cardid + "的密码为" + self.password) 9 card1 = Card("4013346302023459") 10 card2 = Card("4013346302023459","168779")
(2)运算结果如图所示:
8、实战三:打印每月销售明细
(1)模拟实现输出进销存管理系统中的每月销售明细查询,运行程序,输入要查询的月份,如果输入的月份存在销售明细,则显示本月商品销售明细;如果输入的月份不存在或者不是数字,则提示“该月没有销售数据或者输入的月份有误!“。代码如下:
1 class Sale_details: 2 def __init__(self): 3 self.mx = {"2":["商品编号:T0001 商品名称:笔记本电脑", 4 "商品编号:T0002 商品名称:华为荣耀6X", 5 "商品编号:T0003 商品名称:iPad", 6 "商品编号:T0004 商品名称:华为荣耀V9", 7 "商品编号:T0005 商品名称:MacBook\n"]} 8 print('-'*10 + "销售明细" + "-"*10) 9 self.ask() 10 def ask(self): 11 while True: 12 month = input("请输入要查询的月份(比如1、2、3等):") 13 if month in self.mx: 14 print(month + "月份的商品销售明细如下:") 15 for i in range(len(self.mx[month])): 16 print(self.mx[month][i]) 17 else: 18 print("\n该月份没有销售数据或者输入月份有误!\n") 19 sale = Sale_details()
(2)运行结果如图所示:
9、实战四:模拟电影院的自动售票机选票页面
(1)在电影院中观看电影是一项很受欢迎的休闲娱乐,现在,请模拟电影院自动售票机中自动选择电影场次的页面,例如,一部电影在当日的播放时间有很多,可以自动选择合适的场次。代码如下:
1 class Selecet: 2 movie = {"《环太平洋:雷霆再起》":{"time":['9:30','10:40','12:00','14:00','16:30'],"seat":['10-01','10-02','10-03','10-04']}, 3 "《头号玩家》":{"time":['8:30','9:40','12:50','15:00','18:50'],"seat":['09-01','09-02','08-03','06-04']}, 4 "《红海行动》":{"time":['8:30','9:40','12:50','15:00','18:50'],"seat":['09-01','09-02','08-03','06-04']}} 5 times = [] 6 seats = [] 7 def selecet_movie(Selecet): 8 listmovie=[] 9 print('请选择正在上映的电影:',end="") 10 for i in Selecet.movie: 11 listmovie.append(i) 12 for j in range(len(listmovie)): 13 print(" " + str(j+1) + "、" + listmovie[j],end = "") 14 print("\n") 15 choose_film = int(input()) 16 print("已选择电影:" + listmovie[choose_film-1] + "\n") 17 return listmovie[choose_film-1] 18 def changci(Selecet,choose_film): 19 print("请选择电影播放场次:",end = "") 20 for i in Selecet.movie[choose_film]["time"]: 21 Selecet.times.append(i) 22 for j in range(len(Selecet.times)): 23 print(" " + str(j+1) + "、" + Selecet.times[j],end = "") 24 print("\n") 25 choose_time = int(input()) 26 print("已选择场次:" + Selecet.times[choose_time-1] + "\n") 27 return Selecet.times[choose_time-1] 28 def zuowei(Selecet,choose_film): 29 print("请选择座位剩余座位:",end = "") 30 for i in Selecet.movie[choose_film]["seat"]: 31 Selecet.seats.append(i) 32 for j in range(len(Selecet.seats)): 33 print(" " + str(j+1) + "、" + Selecet.seats[j],end = "") 34 print("\n") 35 choose_seat = int(input()) 36 print("选择座位:" + Selecet.seats[choose_seat-1] + "\n") 37 return Selecet.seats[choose_seat-1] 38 def chupiao(Selecet,choose_film,choose_time,choose_seat): 39 print("正在出票。。。\n") 40 print("电影:" + choose_film) 41 print("播出时间:" + choose_time) 42 print("选择座位是:" + choose_seat) 43 print("\n出票完成,请别忘记取票!") 44 selecet1 = Selecet() 45 choose_film = Selecet.selecet_movie(Selecet) 46 choose_time = Selecet.changci(Selecet,choose_film) 47 choose_seat = Selecet.zuowei(Selecet,choose_film) 48 Selecet.chupiao(Selecet,choose_film,choose_time,choose_seat)
(2)运行结果如图所示:
标签:__,Python,self,Selecet,实验,choose,print,def From: https://www.cnblogs.com/xiakong/p/16812101.html