Python实验报告——第7章 面向对象程序设计

 实验报告

【实验目的】 

1.掌握Python中如何定义类、使用类,以及property属性的应用等。

2.掌握封装、继承、多态等OOP应用。

【实验条件】

1.PC机或者远程编程环境。

 

【实验内容】

1.完成第七章 面向对象程序设计 实例01-05,实战一到实战四

 

 

实例01:通过类属性统计类的实例个数

   在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 #调用方法
12 beak_1 = "喙的基部较高,长度和头部的长度几乎相等"
13 wing_1 = "翅膀长而尖"
14 claw_1 = "爪子是璞状的"
15 whildGoose = Geese(beak_1, wing_1, claw_1)
16 whildGoose.fly("我飞行的时候,一会儿排成个人字,一会排成个一字")

 

 

 运行结果如下:

 

 

 

 

 

 

实例02:根据身高、体重计算BMI指数(共享版)

   在 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 
14 #创建四个雁类的对象
15 list1 = []
16 for i in range(4):
17     list1.append(Geese())
18 print("一共有" + str(Geese.number) + "只大雁")

 

 

 

 运行结果如下:

 

 

 

 

 

 

 

实例03:在模拟电影点播功能时应用属性

  在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    #设置setter方法,修改稀有属性的值
 9     def show(self, value):
10         if value in TVshow.list_film:   #判断值是否在列表中
11             self.__show = "您选择了《" + value + "》, 稍后将播放"
12         else:
13             self.__show = "您点播的电影不存在"
14 
15 tvshow = TVshow("战狼2")
16 print("正在播放:《", tvshow.show, "")
17 print("您可以从", tvshow.list_film, "中选择要播放的电影")
18 tvshow.show = "红海行动"
19 print(tvshow.show)

 

 

 运行结果如下:

 

 

 

 

 

 

 

 

 

实例04:创建水果基类及其派生类

  在IDLE中创建一个名称为 fruit.py 的文件,然后在该文件中定义一个水果类Fruit(作为基类),并在该类中定义一个类属性(用于保存水果默认的颜色)和一个harvest()方法,然后创建Apple类和Orange类,都继承自Fruit类,最后创建Apple类和Orange类的实例,并调用harvest()方法(在基类中编写)。

 

代码如下:

 1 class Fruit:
 2     color = "绿色"
 3     def harvest(self, color):
 4         print("水果是:" + color + "的!")        #输出形参color
 5         print("水果已经收获......")
 6         print("水果原来是:" + Fruit.color + "的!");   #输出类属性color
 7 
 8 class Apple(Fruit):     #继承父类Fruit
 9     color = "红色"
10     def __init__(self):
11         print("我是苹果")
12 
13 class Orange(Fruit):
14     color = "橙色"
15     def __init__(self):
16         print("\n我是橘子")
17 apple = Apple()
18 apple.harvest(apple.color)      #调用父类的harvest方法
19 orange = Orange()
20 orange.harvest(orange.color)    #调用父类的harvest方法

 

 

 

 运行结果如下:

 

 

 

 

 

 

 

实例05:在派生类中调用基类的__init__()方法定义类属性

   在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):
 5            print("水果是:" + self.color + "的!")    #输出形参color
 6            print("水果已经收获......")
 7            print("水果原来是:" + Fruit.color + "的!")     #输出类属性color
 8 
 9 class Apple(Fruit):
10     color = "红色"
11     def __init__(self):
12         print("我是苹果")
13         super().__init__()  #调用父类的构造器
14 
15 class Sapodilla(Fruit):
16     def __init__(self, color):
17         print("\n我是人参果")
18         super().__init__(color)     #调用父类的构造器
19         #重写父类harvest()方法
20         def harvest(self, color):
21             print("人参果是:" + self.color + "的!")  # 输出形参color
22             print("人参果已经收获......")
23             print("人参果原来是:" + Fruit.color + "的!") #输出类属性color
24 
25 apple = Apple()
26 apple.harvest(apple.color)
27 sapodilla = Sapodilla("白色")
28 sapodilla.harvest("金黄色带紫色条纹")

 

 

 运行结果如下:

 

 

 

 

实战一:修改手机默认语言

  模智能手机的默认语言为英文,但制造手机时可以将默认语言设置为中文。编写手机类,采用无参构造方法时,表示使用默认语言设计,利用有参构造方法时,修改手机的默认语言。效果如图7.22所示。

 

 

 

代码如下:

 1 class Phone:
 2     def __init__(self, language = "英文"):
 3         if language == "英文":
 4             print("智能手机的默认语言为英文")
 5         else:
 6             print("将智能手机的默认语言设置为" + language)
 7 phone1 = Phone()
 8 phone2 = Phone("中文")
 9 
10 
11 # Python的构造函数是不能重载一个类只能有一个构造函数存在。
12 # 定义多个构造方法时,实例化类只实例化最后的构造方法
13 # 即后面的构造方法会覆盖前面的构造方法

 

 

 运行结果如下:

 

 

 

 

 

 

实战二:给信用卡设置默认密码

  创建信用卡类,并且为该类创建一个构造方法,该构造方法有3个参数,分别是self、卡号和密码。其中,密码可以设置一个默认值123456,代表默认密码。在创建类的实例时,如果不指定密码,就采用默认密码,否则要重置密码。效果如图7.23所示。

 

 

 

代码如下:

1 class Card:
2     def __init__(self, id, pwd = "123456"):
3         if pwd == "123456":
4             print("信用卡" + str(id) + "的默认密码为" + str(pwd))
5         else:
6             print("重置信用卡" + str(id) + "的密码为" + str(pwd))
7 
8 card1 = Card("40137335633800642")
9 card2 = Card("40137335633800642", "168779")

 

 

 运行结果如下:

 

 

 

 

 

实战三:打印每月销售明细

  模拟实现输出进销存管理系统中的每月销售明细,运行程序,输入要查询的月份,如果输入的月份存在销售明细,则显示本月商品销售明细;如果输入的月份不存在或不是数字,则提示“该月没有销售数据或者输入的月份有误!”。效果如图7.24所示。

 

 

代码如下:

 1 class Sale:
 2     def __init__(self):
 3         self.details = {'2': ['商品编号:T0001 商品名称:笔记本电脑',
 4                            '商品编号:T0002 商品名称:华为荣耀6X',
 5                            '商品编号:T0003 商品名称:iPad',
 6                            '商品编号:T0004 商品名称:华为荣耀V9',
 7                            '商品编号:T0005 商品名称:MacBook']}
 8     def showInfo(self, month):      #查询商品明细
 9         if month in self.details:
10             print(str(month) + "月份的商品销售明细如下:")
11             for item in self.details[month]:
12                 print(item)
13         else:
14             print("该月份没有销售数据或输入月份有误!")
15 
16 print("————————————————销售明细——————————————————")
17 sale = Sale()
18 while(True):
19     month = input("请输入要查询的月份(比如1、2、3等,输入0退出):")
20     if month == '0':
21         break
22     sale.showInfo(month)

 

 

 运行结果如下:

 

 

 

 

 

 

实战四:模拟电影院的自动售票机选票页面

  在电影院中观看电影是一项很受欢迎的休闲娱乐,现请模拟电影院自动售票机中自动选择电影场次的页面,例如,一部电影在当日的播放时间有很多,可以自动选择合适的场次。效果如图7.25所示。

 

 

 

代码如下:

 1 class Movie:
 2     movie_name = ''
 3     sessions = ''
 4     seat = ''
 5 
 6     def __init__(self):
 7         print('\n欢迎使用自动售票机~~')
 8 
 9     def choiceMovie(self, name):  #选择电影
10         Movie.movie_name = name
11         print("已选电影:" + Movie.movie_name)
12 
13     def choiceSessions(self, sessions):  #选择场次
14         Movie.sessions = "2018.4.12 " + sessions
15         print('电影场次:' + sessions)
16 
17     def seats(self, seat):  #选择座位
18         Movie.seat = seat
19         print('选择座位:' + seat)
20 
21     def showInfo(self):
22         print("电影:" + Movie.movie_name)
23         print("播出时间:" + Movie.sessions)
24         print("座位:" + Movie.seat)
25         print('\n出票完成,请别忘记取票')
26 
27 movie1 = Movie()
28 print('\n请选择正在上映的电影:1、《长津湖》 2、《战狼2》3、《红海行动》')
29 movie1.choiceMovie(input())
30 print('\n请选择电影播放场次:1、9:30  2、10:40  3、12:00')
31 movie1.choiceSessions(input())
32 print('\n请选择座位剩余座位:10-01, 10-02, 10-03, 10-04')
33 movie1.seats(input())
34 print('\n正在出票。。。\n')
35 # 电影票信息
36 movie1.showInfo()

 

 

 运行结果如下:

 

 

 

 

posted @ 2022-10-21 15:21  五麦  阅读(543)  评论(0编辑  收藏  举报