Python实验报告——第7章 面向对象程序设计
实例01:创建大雁类并定义飞行方法
在IDLE中创建一个名称为geese.py 的文件,然后在该文件中定义一个大雁类Geese,并定义一个构造方法,然后再定义一个实例方法fly(),该方法有两个参数,一个是self,另一个用于指定飞行状态,最后再创建大雁类的实例,并调用实例方法 fly()。
代码如下:
class Geese:
'''大雁类'''
def __init__(self, beak, wing, claw): #构造器
print("我是大雁类!我有以下特征:")
print(beak)
print(wing)
print(claw)
def fly(self, state):
print(state)
#调用方法
beak_1 = "喙的基部较高,长度和头部的长度几乎相等"
wing_1 = "翅膀长而尖"
claw_1 = "爪子是璞状的"
whildGoose = Geese(beak_1, wing_1, claw_1)
whildGoose.fly("我飞行的时候,一会儿排成个人字,一会排成个一字")
运行结果如下:

实例02:通过类属性统计类的实例个数
在 IDLE中创建一个名称为geese_a.py 的文件,然后在该文件中定义一个雁类Geese,并在该类中定义4个类属性,前3个用于记录雁类的特征,第4个用于记录实例编号,然后定义一个构造方法,在该构造方法中将记录实例编号的类属性进行加1操作,并输出4个类属性的值,最后通过for循环创建4个雁类的实例。
代码如下:
class Geese:
'''雁类'''
neck = "脖子较长"
wing = "振翅频率高"
leg = "腿位于身体的中心支点,行走自如"
number = 0
def __init__(self): #构造器
Geese.number += 1
print("\n我是第" + str(Geese.number) + "只大雁,我属于雁类!我有以下特征:")
print(Geese.neck)
print(Geese.wing)
print(Geese.leg)
#创建四个雁类的对象
list1 = []
for i in range(4):
list1.append(Geese())
print("一共有" + str(Geese.number) + "只大雁")
运行结果如下:

实例03:在模拟电影点播功能时应用属性
在IDLE中创建一个名称为film.py 的文件,然后在该文件中定义一个电视节目类TVshow,并在该类中定义一个类属性,用于保存电影列表,然后在_init_()方法中定义一个私有的实例属性,再将该属性转换为可读取、可修改(有条件进行)的属性,最后创建类的实例,并获取和修改属性值。
代码如下:
class TVshow:
list_film = ["战狼2", "红海行动", "西游记女儿国", "熊出没·变形记"]
def __init__(self, show):
self.__show = show
@property #将方法转换为属性
def show(self):
return self.__show #返回私有属性的值
@show.setter #设置setter方法,修改稀有属性的值
def show(self, value):
if value in TVshow.list_film: #判断值是否在列表中
self.__show = "您选择了《" + value + "》, 稍后将播放"
else:
self.__show = "您点播的电影不存在"
tvshow = TVshow("战狼2")
print("正在播放:《", tvshow.show, "》")
print("您可以从", tvshow.list_film, "中选择要播放的电影")
tvshow.show = "红海行动"
print(tvshow.show)
运行结果如下:

实例04:创建水果基类及其派生类
在IDLE中创建一个名称为 fruit.py 的文件,然后在该文件中定义一个水果类Fruit(作为基类),并在该类中定义一个类属性(用于保存水果默认的颜色)和一个harvest()方法,然后创建Apple类和Orange类,都继承自Fruit类,最后创建Apple类和Orange类的实例,并调用harvest()方法(在基类中编写)。
代码如下:
class Fruit:
color = "绿色"
def harvest(self, color):
print("水果是:" + color + "的!") #输出形参color
print("水果已经收获......")
print("水果原来是:" + Fruit.color + "的!"); #输出类属性color
class Apple(Fruit): #继承父类Fruit
color = "红色"
def __init__(self):
print("我是苹果")
class Orange(Fruit):
color = "橙色"
def __init__(self):
print("\n我是橘子")
apple = Apple()
apple.harvest(apple.color) #调用父类的harvest方法
orange = Orange()
orange.harvest(orange.color) #调用父类的harvest方法
运行结果如下:

实例05:在派生类中调用基类的__init__()方法定义类属性
在IDLE中创建一个名称为fruit.py的文件,然后在该文件中定义一个水果类Fruit〈作为基类),并在该类中定义_init_()方法,在该方法中定义一个类属性(用于保仔水果默认的颜巴),然石仕Fruit类中定义一个harvest()方法,再创建Apple类和 Sapodilla类,都继承自Fruit类,最后创建Apple类和Sapodilla类的实例,并调用harvest()方法(在基类中编写)。
代码如下:
class Fruit: #父类
def __init__(self, color = "绿色"):
Fruit.color = color
def harvest(self, color):
print("水果是:" + self.color + "的!") #输出形参color
print("水果已经收获......")
print("水果原来是:" + Fruit.color + "的!") #输出类属性color
class Apple(Fruit):
color = "红色"
def __init__(self):
print("我是苹果")
super().__init__() #调用父类的构造器
class Sapodilla(Fruit):
def __init__(self, color):
print("\n我是人参果")
super().__init__(color) #调用父类的构造器
#重写父类harvest()方法
def harvest(self, color):
print("人参果是:" + self.color + "的!") # 输出形参color
print("人参果已经收获......")
print("人参果原来是:" + Fruit.color + "的!") #输出类属性color
apple = Apple()
apple.harvest(apple.color)
sapodilla = Sapodilla("白色")
sapodilla.harvest("金黄色带紫色条纹")
运行结果如下:

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

代码如下:
class Phone:
def __init__(self, language = "英文"):
if language == "英文":
print("智能手机的默认语言为英文")
else:
print("将智能手机的默认语言设置为" + language)
phone1 = Phone()
phone2 = Phone("中文")
# Python的构造函数是不能重载一个类只能有一个构造函数存在。
# 定义多个构造方法时,实例化类只实例化最后的构造方法
# 即后面的构造方法会覆盖前面的构造方法
运行结果如下:

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

代码如下:
class Card:
def __init__(self, id, pwd = "123456"):
if pwd == "123456":
print("信用卡" + str(id) + "的默认密码为" + str(pwd))
else:
print("重置信用卡" + str(id) + "的密码为" + str(pwd))
card1 = Card("40137335633800642")
card2 = Card("40137335633800642", "168779")
运行结果如下:

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

代码如下:
class Sale:
def __init__(self):
self.details = {'2': ['商品编号:T0001 商品名称:笔记本电脑',
'商品编号:T0002 商品名称:华为荣耀6X',
'商品编号:T0003 商品名称:iPad',
'商品编号:T0004 商品名称:华为荣耀V9',
'商品编号:T0005 商品名称:MacBook']}
def showInfo(self, month): #查询商品明细
if month in self.details:
print(str(month) + "月份的商品销售明细如下:")
for item in self.details[month]:
print(item)
else:
print("该月份没有销售数据或输入月份有误!")
print("————————————————销售明细——————————————————")
sale = Sale()
while(True):
month = input("请输入要查询的月份(比如1、2、3等,输入0退出):")
if month == '0':
break
sale.showInfo(month)
运行结果如下:

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

代码如下:
class Movie:
movie_name = ''
sessions = ''
seat = ''
def __init__(self):
print('\n欢迎使用自动售票机~~')
def choiceMovie(self, name): #选择电影
Movie.movie_name = name
print("已选电影:" + Movie.movie_name)
def choiceSessions(self, sessions): #选择场次
Movie.sessions = "2018.4.12 " + sessions
print('电影场次:' + sessions)
def seats(self, seat): #选择座位
Movie.seat = seat
print('选择座位:' + seat)
def showInfo(self):
print("电影:" + Movie.movie_name)
print("播出时间:" + Movie.sessions)
print("座位:" + Movie.seat)
print('\n出票完成,请别忘记取票')
movie1 = Movie()
print('\n请选择正在上映的电影:1、《长津湖》 2、《战狼2》3、《红海行动》')
movie1.choiceMovie(input())
print('\n请选择电影播放场次:1、9:30 2、10:40 3、12:00')
movie1.choiceSessions(input())
print('\n请选择座位剩余座位:10-01, 10-02, 10-03, 10-04')
movie1.seats(input())
print('\n正在出票。。。\n')
# 电影票信息
movie1.showInfo()
运行结果如下:

浙公网安备 33010602011771号